剑指Offer——二维数组中的查找

题目描述:

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

 

分析:

因为二维数组中,从左到右和从上到下都是递增排序,可以从右上角往左下角查找(或者从左下角往右上角查找),只需O(n)的时间复杂度,不需要遍历整个数组,那样时间复杂度是O(n^2)。从右上角往左下角查找,如果该位置的数比目标小,就往左移一位;比目标大,就往下移一位;相等则找到了,查找停止。

 

代码:

 1 class Solution {
 2 public:
 3     bool Find(int target, vector<vector<int> > array) {
 4         int row = array.size();
 5         int col = array[0].size();
 6         int i = 0, j = col - 1; // 从右上角往左下查找
 7         while(i < row && j >= 0) {
 8             if(array[i][j] == target) return true;  // 找到了
 9             if(array[i][j] > target) {  // 往左查找
10                 j--;
11                 continue;
12             }
13             if(array[i][j] < target) {  // 往下查找
14                 i++;
15                 continue;
16             }
17         }
18         return false;
19     }
20 };

 

posted @ 2017-10-26 14:37  叶建成  阅读(179)  评论(0编辑  收藏  举报