两种解决方法:
1.按照二分查找的思想,由于题目的描述,二维数组按左到右递增,那么就相当于每一行都是有序的,可以把每一行都当做一个独立的数组进行二分查找。
bool Find1(int target, vector<vector<int> > array) { for(int i=0;i<array.size();i++){ int l =0; int r =array[i].size()-1; while(l<=r){ int m = (l+r)/2; if(array[i][m]==target) return true; else if(array[i][m]>target){ r = m-1; }else{ l = m+1; } } } return false; }
2.第二种方法:比较巧妙,充分利用了从左到右递增,从上到下也递增的特性。
定义行r =0,列c = len-1;
判断:
if target == array[r][c] 则证明找到,return true
if target > array[r][c] 则当前值小于目标值,那么目标值必定在下面的行中。(因为当前列已经是最大的了) r++
if target < array[r][c] 则当前值大于目标值