牛客网 剑指offer 01 两种解法
2020-06-11 23:50 woshihuangrulin 阅读(156) 评论(0) 收藏 举报在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
首先想到用了一个二分查找,代码如下:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int row = array.size();
if (row == 0) return false;
int col = array[0].size();
if (col == 0) return false;
for (int i=0; i<row; i++) {
if (array[i].back() < target)
continue;
int left = 0;
int right = col-1;
int mid = 0;
while(left<=right) {
mid = left + (right-left)/2;
if (array[i][mid] == target)
return true;
else if (array[i][mid] < target)
left = mid + 1;
else if (array[i][mid] > target)
right = mid - 1;
}
}
return false;
}
};
之后看答案发现还有更好的解法,从右上角开始找,如果找到了就返回,小于target就跳到下一行,如果大于target就跳到左边一列,按照这个思路又写了一遍:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int row = array.size();
if (row == 0) return false;
int col = array[0].size();
if (col == 0) return false;
int row_index = 0;
int col_index = col-1;
while (row_index < row && col_index >=0) {
if (array[row_index][col_index] == target) {
return true;
}
else if (array[row_index][col_index] > target) {
col_index--;
}
else if (array[row_index][col_index] < target) {
row_index++;
}
}
return false;
}
};
浙公网安备 33010602011771号