题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
有两种思路:
思路1:每一行进行二分查找,时间复杂度是O(nlogn)
代码:
class Solution { public: bool Find(int target, vector<vector<int> > array) { if(array.empty()) return 0; for(int i=0;i<array.size();i++){ int start=0; int end=array[i].size()-1; while(start<=end){ int mid=(start+end)/2; if(array[i][mid]==target) return 1; else if(array[i][mid]>target) --end; else ++start; } } return 0; } };
思路2:从右上角元素开始比较,如果taget元素大于此元素,去掉该行,若小于,去掉列,时间复杂度是O(n)
代码:
class Solution { public: bool Find(int target, vector<vector<int> > array) { if(array.empty()) return 0; int i=0; int j=array[0].size()-1; while(i<array.size()&&j>=0){ if(array[i][j]==target) return 1; else if(array[i][j]>target) --j; else ++i; } return 0; } };