【Leet Code】74. Search a 2D Matrix---Medium
2015-11-17 17:03
274 查看
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
Given target =
思路:
解决该题目的方法就是对一维数组的二分查找进行变形操作,先对中间行对一维数组的二分查找,如果找到就返回true。
如果没找到,如果target<matrix[mid][0],则令down=mid-1;否则,up=mid+1.
代码实现:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target =
3, return
true.
思路:
解决该题目的方法就是对一维数组的二分查找进行变形操作,先对中间行对一维数组的二分查找,如果找到就返回true。
如果没找到,如果target<matrix[mid][0],则令down=mid-1;否则,up=mid+1.
代码实现:
class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if(matrix.size() < 1 || matrix[0].size() < 1) return false; int up = 0, down = matrix.size()-1; int mid = 0; while(up <= down) { mid = (up + down)/2; if(searchArray(matrix[mid], target)) return true; if(target < matrix[mid][0]) down = mid -1; else up = mid + 1; } return false; } private: bool searchArray(vector<int>& nums, int target){ int left = 0, right = nums.size() -1; int mid = 0; while(left <= right) { mid = (left + right)/2; if(target == nums[mid]) return true; if(target > nums[mid]) left = mid + 1; else right = mid - 1; } return false; } };
相关文章推荐
- 好看的table样式
- 理解matplotlib绘图
- 开启/关闭ubuntu防火墙
- Hadoop HDFS
- java中,一个类实现某个接口,必须重写接口中的所有方法吗???
- Android_切换主题或皮肤的实现方式
- socket实现简单的echo应答服务器和客户端
- 项目5-- 迷宫问题之图深度优先遍历解法
- java使用FileReader上传图片,可支持预览,支持多张上传
- linux 配置多个tomcat(本文配置了两个)
- 常用的正则表达式
- C++字符串转化为数字的库函数
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 微信登录开发-java
- PS
- Kafka 分布式环境搭建
- Week3-3The vector space model
- 仿ios分段选择器(自定义radiogroup)
- SVM算法实现(一)
- 关于数组的一些操作