[LeetCode] 74. Search a 2D Matrix
来源:互联网 发布:淘宝店铺设置自动回复 编辑:程序博客网 时间:2024/06/10 03:33
74. Search a 2D Matrix (二维数组中的查找)
- Search a 2D Matrix 二维数组中的查找
- 题目翻译
- 解题方法
- 代码
1. 题目翻译
给定一个m * n的二维数组和一个要查找的值,在该二维数组中查找给定的值。如果存在返回true否则返回false。
该数组有以下性质:
- 每行都是递增排列的
- 每列都是递增排列的
例子:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3, 返回 true.
2. 解题方法
二分查找的变形,将数组分成4块,如图所示
将每组的第一个值,即左上角的值与target比较
- 如果比target大则说明在这个分组中不可能存在target(因为每个块中左上角的值是最小的)返回false。
- 如果等于target就返回true。
- 如果小于target,需要确认这个分组中是不是只用这一个值,如果是则返回false。如果不是,使用递归继续分组。
3. 代码
class Solution {private: bool search(vector<vector<int>>& matrix, int i, int j, int m, int n, int target) { /* i,m 是该分块中,左上角的值的坐标,j,m是该分块中,右下角值的坐标,通过这四个值可以确定分块的范围。*/ if (i > j || m > n) return false; if (matrix[i][m] == target) return true; else if (matrix[i][m] > target) return false; else { if (i >= j && m >= n) return false; int a = i+(j - i) / 2; int b = m+(n - m) / 2; //将数组分为四块,并递归求解 return search(matrix, i, a, m, b, target) || search(matrix, i, a, b + 1, n, target) || search(matrix, a + 1, j, m, b, target) || search(matrix, a + 1, j, b + 1, n, target); } }public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int a = matrix.size(); if (a == 0) return false; int b = matrix[0].size(); if (b == 0) return false; return search(matrix, 0, a-1, 0, b-1, target); }};
阅读全文
0 0
- LeetCode 74. Search a 2D Matrix
- [LeetCode]74.Search a 2D Matrix
- LeetCode --- 74. Search a 2D Matrix
- [Leetcode] 74. Search a 2D Matrix
- [leetcode] 74.Search a 2D Matrix
- Leetcode 74. Search a 2D Matrix
- [LeetCode]74. Search a 2D Matrix
- 74. Search a 2D Matrix LeetCode
- [LeetCode]74. Search a 2D Matrix
- [LeetCode]74. Search a 2D Matrix
- leetcode 74. Search a 2D Matrix
- LeetCode 74. Search a 2D Matrix
- LeetCode 74. Search a 2D Matrix
- LeetCode *** 74. Search a 2D Matrix
- leetcode 74. Search a 2D Matrix
- LeetCode 74. Search a 2D Matrix
- leetcode-74. Search a 2D Matrix
- [leetcode] 74. Search a 2D Matrix
- shell中字符串截取技巧
- HDFS之数据完整性校验
- EasyDemo*android面试常见式题
- js函数的调用形式和常用事件
- JavaScript 中的继承
- [LeetCode] 74. Search a 2D Matrix
- Js中var、let、const的区别
- Python风格规范
- 算法训练 筛选号码
- 四种参数传递的形式——URL,超链接,js,form表单
- angularJs添加,删除,查询
- 李飞飞:在物体识别之后,计算机视觉还要多久才能理解这个世界?
- 数据分析两场NBA比赛结果!大数据+NBA=?
- 吴恩达,李开复等专家组队打造2017AI趋势报告(附报告全文和完整数据包)