/** 正常的二维搜索估计要超时,本题沿着对角线搜索,然后找到第一个大于目标数字的坐标(x,y)然后搜索(>x,<y)(<x,>y)子区域; 矩阵size() 为m,n;当i>=m时更新i=m,同理j>=n时,j=n;当j和i同时为n,m时还没找到目标数则return; **/ class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); if(m==0) return false; int n=matrix[0].size(); if(n==0) return false; int x=0,y=0; //cout<<m<<","<<n<<endl; for(int k=0;k<max(m,n);k++){ //cout<<matrix[x][y]<<endl; if(matrix[x][y]<target){ x=x<m-1?(x+1):m-1; y=y<n-1?(y+1):n-1; continue; }else{ if(matrix[x][y]==target)return true; for(int i=x;i<m;i++) for(int j=0;j<y;j++) if(matrix[i][j]==target) return true; for(int i=0;i<x;i++) for(int j=y;j<n;j++) if(matrix[i][j]==target) return true; return false; } } return false; } };
原文地址:https://www.cnblogs.com/joelwang/p/10929959.html
时间: 2024-10-29 04:00:41