[leetcode] 240 Search a 2D Matrix II
来源:互联网 发布:上海软件编程培训机构 编辑:程序博客网 时间:2024/06/05 07:53
很经典的一道题,每行由左到右,每列由上到下升序排列,让我们采用高效的算法判断一个值是不是存在。
第一种方案:遍历行,若发现行首的元素<=target<=行尾的元素,则对该行进行二分查找。
这样的时间复杂度是O(n+m)。要优于第一种算法。
第一种方案:遍历行,若发现行首的元素<=target<=行尾的元素,则对该行进行二分查找。
这个算法的最坏时间复杂度是O(n*logm)。当然如果你对行也进行二分搜索,确定一个搜索的行的范围的话,时间复杂度会更低。
class Solution {public: bool searchMatrix(vector<vector<int> >& matrix, int target) { int n=matrix.size(),m=matrix[0].size(); for(int i=0;i<n;i++) { if(matrix[i][0]<=target&&matrix[i][m-1]>=target) { int left=0,right=m-1; while(left<=right) { int mid=(left+right)/2; if(matrix[i][mid]==target) return true; else if(matrix[i][mid]>target) right=mid-1; else left=mid+1; } } } return false; }};第二种方案:很巧妙的一个答案,我也是看了网上的题解才发现这种精巧的算法。算法主要是根据矩阵的特点得来的,如果我们从矩阵的右上角开始,如果target>cur时,那么行数当前行排除,行数+1;如果target<cur时,那么当前列排除,列数-1.遇到边界则结束,返回false;
这样的时间复杂度是O(n+m)。要优于第一种算法。
class Solution {public: bool searchMatrix(vector<vector<int> >& matrix, int target) { int n=matrix.size(),m=matrix[0].size(); int i=0,j=m-1; while(i<n&&j>=0) { if(matrix[i][j]==target) return true; else if(matrix[i][j]<target) i++; else j--; } return false; }};
1 0
- #leetcode#Search a 2D Matrix II
- [LeetCode] Search a 2D Matrix II
- leetcode: Search a 2D Matrix II
- leetcode - Search a 2D Matrix II
- [leetcode] Search a 2D Matrix II
- 【leetcode】Search a 2D Matrix II
- Leetcode: Search a 2D Matrix II
- LeetCode Search a 2D Matrix II
- [Leetcode]Search a 2D Matrix II
- [LeetCode]Search a 2D Matrix II
- LeetCode Search a 2D Matrix II
- [LeetCode]Search a 2D Matrix II
- LeetCode || Search a 2D Matrix II
- LeetCode----Search a 2D Matrix II
- Leetcode: Search a 2D Matrix II
- *LeetCode-Search a 2D Matrix II
- Search a 2D Matrix II -- leetcode
- leetcode | Search a 2D Matrix II
- 黑马程序员—面向对象
- hibernate持久化对象的三个状态
- sql跨数据库批量插入
- Android自定义View的注意点
- LeetCode之Binary Tree Maximum Path Sum
- [leetcode] 240 Search a 2D Matrix II
- 使用Python将csv文件批量化导入SQL Server
- 下载安装并修改wamp配置文件
- 结果体和联合体
- centos下 安装 rvm
- 139. Word Break
- [C++]Ugly Number 丑数
- STL heap部分源码分析
- 如何客制化开机Logo?