剑指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 };

 

 

posted on 2015-12-06 12:57  Excavator  阅读(140)  评论(0编辑  收藏  举报

导航