输入一个矩阵,其中每一行递增,每一列递增,要求设计一个高效的算法判断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 };
时间: 2024-10-12 23:26:25