leetcode-Search a 2D Matrix II-240

输入一个矩阵,其中每一行递增,每一列递增,要求设计一个高效的算法判断target是否在矩阵中

递增,所以二分,lgM*lgN

总体来说就是从右上角往下找到左下角

 1 class Solution {
 2 public:
 3     bool searchMatrix(vector<vector<int> >& matrix, int target) {
 4         int m=matrix.size();
 5         if(m==0) return false;
 6         int n=matrix[0].size();
 7         int b1=n-1;
 8         int ok=1;
 9         int l,r;
10         int a1=0;
11         while(1){
12             if(ok){
13                 ok=0;
14                 l=0,r=b1;
15                 b1=-1;
16                 while(l<=r){
17                     int mid=(l+r)>>1;
18                     int tmp=matrix[a1][mid];
19                     if(tmp==target) return true;
20                     if(tmp<target){
21                         b1=mid;
22                         l=mid+1;
23                     }
24                     else r=mid-1;
25                 }
26                 if(b1==-1) return false;
27             }
28             else{
29                 ok=1;
30                 l=a1,r=m-1;
31                 a1=-1;
32                 while(l<=r){
33                     int mid=(l+r)>>1;
34                     int tmp=matrix[mid][b1];
35                     if(tmp==target) return true;
36                     if(tmp>target){
37                         a1=mid;
38                         r=mid-1;
39                     }
40                     else l=mid+1;
41                 }
42                 if(a1==-1) return false;
43             }
44         }
45         return false;
46     }
47 };

 

posted @ 2016-09-03 21:54  0_summer  阅读(118)  评论(0编辑  收藏  举报