题目:
给出一个每行从左到右递增且每列从上到下递增的二维数组和一个整数,在二维数组中搜索这个数组。
解题思路:
本题可以采用分治的算法。从二维数组最右上角的元素开始查找,若这个数与target相等,则找到。若这个数比target小,由于这个数是这一整行最大的数,则可知这一整行都比target要小,因此可以删除这一整行。若这个数比target要大,由于这个数是这一整列最小的数,则可知这一整列都比target要大,因此可以删除这一整列。然后,再在得到的新的二维数组里继续上述步骤查找。
代码:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
bool find = false;
if(!matrix.empty()){
int rows = matrix.size();
int columns = matrix[0].size();
int row = 0;
int column = columns - 1;
while(row < rows && column >= 0){
if(matrix[row][column] == target){
find = true;
break;
}
else if(matrix[row][column] < target)
row ++;
else column --;
}
}
return find;
}
};