面试题3:数组中重复的数字题目链接
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
/* 思路:遍历数组时将元素逐个归位
时间复杂度 O(n)
空间复杂度 O(1)
*/
int n = nums.size();
for(int i = 0;i < n; i++){
while(nums[i] != i){
if(nums[i] != nums[nums[i]])
swap(nums[i], nums[nums[i]]);
else
return nums[i];
}
}
return -1;
}
};
面试题4:二维数组中的查找题目链接
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
/* 思路:从数组右上角(或者左下角)开始查找
时间复杂度 O(m+n)
空间复杂度 O(1)
*/
int n = matrix.size();
if(n == 0)
return false;
int m = matrix[0].size();
if(m == 0)
return false;
int i = 0, j = m-1;
while(i >= 0 && i <= n-1 && j >= 0 && j <= m-1){
if(matrix[i][j] == target)
return true;
else if(matrix[i][j] > target)
j -= 1;
else if(matrix[i][j] < target)
i += 1;
}
return false;
}
};