leetcode_074 Search a 2D Matrix
2016-03-25 22:39
471 查看
题目分析:编写算法,实现从1个m*n的矩阵中查找给定的值。矩阵特点如下:每一行从左到右递增,每一列从上到下递增。
解题思路:
解法一:遍历查找
从右上角开始遍历,每次遍历中,若与target相等,则返回true;若小于target,则向下移动一行,若
大于target则向左移动一列,时间复杂度为O(m+n)。
解法二:二分查找
二分查找确定target可能在第几行出现,然后再利用二分查找在该行中确定target可能出现的位置,时
间复杂度为O(logn + logm)。
解题思路:
解法一:遍历查找
从右上角开始遍历,每次遍历中,若与target相等,则返回true;若小于target,则向下移动一行,若
大于target则向左移动一列,时间复杂度为O(m+n)。
解法二:二分查找
二分查找确定target可能在第几行出现,然后再利用二分查找在该行中确定target可能出现的位置,时
间复杂度为O(logn + logm)。
class Solution { public: //第一种思路:从右上角开始扫描 bool searchMatrix1(vector< vector<int> > &matrix, int target) { if(matrix.size() == 0 || matrix[0].size() == 0) return false; int i = 0; //控制行标志 int j = matrix[0].size() - 1; //控制列标志 while (i < matrix.size() && j >= 0) { int x = matrix[i][j]; if (target == x) return true; else if (target < x) --j; else i++; } return false; } // 第二种思路:二分查找 bool searchMatrix2(vector< vector<int> >& matrix, int target) { if (matrix.size() == 0 || matrix[0][0] > target) return false; int rows = matrix.size(); int cols = matrix[0].size(); int begin = 0; int end = rows - 1; //二分查找,查找所在行 while (begin <= end) { int mid = begin + (end - begin) / 2; if (matrix[mid][0] > target) end = mid - 1; else if (matrix[mid][0] < target) begin = mid + 1; else if (matrix[mid][0] == target) return true; } // 记录查找所在的行 int row = begin - 1; int left = 0; int right = cols - 1; // 二分查找,查找所在的列 while (left <= right) { int Mid = left + (right - left) / 2; if (matrix[row][Mid] < target) left = Mid + 1; else if (matrix[row][Mid] > target) right = Mid - 1; else if (matrix[row][Mid] == target) return true; } return false; } };
相关文章推荐
- 发布后注意
- Android Studio SDK 代理地址设置
- oracle编译存储过程提示表或视图不存在的问题分析
- [LeetCode] Combinations
- prepareStatement和Statement的区别
- AppAgent 内存泄漏问题总结与反思
- 从MVC到MVVM
- 最短路径的Dijkstra算法(邻接表)
- iOS xml文件的解析方式 XMLDictionary,GDataXMLNode,NSXMLParser 转发自徒步天涯
- 二维数组的动态内存分配
- 五、初学SpringMVC+Mybatis之SpringMVC简介
- Java异常分类和统一处理
- hdu2159
- 贴近自身的装修
- Trick(十五)—— 树结构如何判断一个节点是内部节点(internal node)还是叶子节点(leaf node)
- 关于OGR读取多边形-Polygon(GDAL 2.0版本之前)
- 【数据结构排序算法系列】数据结构八大排序算法
- 【数据结构排序算法系列】数据结构八大排序算法
- Android涉及到的设计模式(转)
- iOS xml文件的解析方式 XMLDictionary,GDataXMLNode,NSXMLParser