剑指offer | 有序二维数组查找
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目解析
本题的关键就在于从那个角开始查找。对角(左上至右下)的话,往右或往下都是大于当前元素。然而反角(从左下至右上)的话,往上变小,往右变大,即能充分利用其两个方向的有序性。
代码如下:
1 class Solution { 2 public: 3 bool Find(vector<vector<int> > array,int target) { 4 int width = array[0].size(); 5 int depth = array.size(); 6 7 for(int i = depth-1, j = 0; i >= 0 && j < width; ) { 8 if(array[i][j] < target) ++j; 9 else if(array[i][j] > target) --i; 10 else return true; 11 } 12 return false; 13 } 14 };