剑指Offer 二维数组中的查找

题目描述

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

 

思路
法一:
* 矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,
* 因此从左下角开始查找,当要查找数字比左下角数字大时。右移
* 要查找数字比左下角数字小时,上移
时间复杂度O(m+n) 
法二:
每行都用折半查找。时间复杂度是nlogn


AC代码:

 1 class Solution {
 2 public:
 3     bool Find(vector<vector<int> > array,int target) {
 4         int i,j,m,n;
 5         m=array.size();//
 6         n=array[0].size();//
 7         
 8         i=0,j=m-1;
 9         
10         while(i<n&&j>=0)
11         {
12             if(array[i][j]>target)
13                 j--;
14             else if(array[i][j]<target)
15                     i++;
16                         else
17                         return true;            
18         }
19         return false;
20     }
21 };

 

posted @ 2016-08-10 10:43  SeeKHit  阅读(186)  评论(0编辑  收藏  举报