LeetCode() Search a 2D MatrixII

it2022-07-03  97

一开始的超时思路

int row=a.size(),col=a[0].size(); for(int i=0;i<row;i++) { if(a[i][col-1] > target && a[i][0]<=target) { int low=0,high=col-1; while(low<=high) { int mid=(low+high)/2; if (a[i][mid] > target) low = mid-1; else if (a[i][mid] < target) high = mid + 1; else return true; } } } return false;

 先判断列上的数,是否大于target,改进后还是超时

int row=a.size(),col=a[0].size(); for(int i=0;i<col;i++) { if(a[0][i]>target) { col=i-1; break; } } if(col == -1) return false; for(int i=0;i<row;i++) { if(a[i][col-1] > target && a[i][0]<=target) { int low=0,high=col-1; while(low<=high) { int mid=(low+high)/2; if (a[i][mid] > target) low = mid-1; else if (a[i][mid] < target) high = mid + 1; else return true; } } } return false;

 提示用分治算法,什么是分治?

下面是分治的思路:

从右上角开始查找,为什么我一开始觉得这个思路没有前一个有效率呢?直观上来看 不是很慢吗?

class Solution { public: bool searchMatrix(vector<vector<int>>& a, int target) { int row=a.size(),col=a[0].size(); int i=0,j=col-1; while(i<row && j>=0) { if(a[i][j] > target) j--; else if(a[i][j] < target) i++; else return true; } return false; } };

  

转载于:https://www.cnblogs.com/yanqi110/p/4973737.html

相关资源:数据结构—成绩单生成器

最新回复(0)