【LeetCode】240. Search a 2D Matrix II (Medium)
来源:互联网 发布:清华大学王斌算法考试 编辑:程序博客网 时间:2024/06/04 19:35
【题意】给一个m*n的矩阵,矩阵的每一行从左到右,从小到大排列,每一列从上到下,从小到大排列。给定一个元素,返回是不是在矩阵中。
【解】把矩阵分成四个部分
1 2 3 4每个部分的最小元素在左上角,最大元素在右下角,如果要找的元素在最大和最小之间,接着分。有限步后一定会终止,不可能有元素可能既出现在1也出现在4中,所以每次矩阵的size至少减少1/4。矩阵大小是O(mn),时间复杂度O(logm+logn)
class Solution {public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m = matrix.size();int n = 0;if (m) n = matrix[0].size();return f(matrix, 0, m, 0, n, target);}private:bool f(vector<vector<int>>& matrix, int t, int b, int l, int r, int target) {if (t >= b || l >= r) return false;if (b == t + 1 && r == l + 1)return matrix[t][l] == target;int m1 = (t + b) / 2;int m2 = (l + r) / 2;bool r1 = false, r2 = false, r3 = false, r4 = false;if (matrix[t][l] <= target && m1 - 1 >= t && m1 - 1 < b && m2 - 1 >= l && m2 - 1 < r && matrix[m1 - 1][m2 - 1] >= target)r1 = f(matrix, t, m1, l, m2, target);if (m2 >= l && m2 < r && matrix[t][m2] <= target && m1 - 1 >= t && m1 - 1 < b && matrix[m1 - 1][r - 1] >= target)r2 = f(matrix, t, m1, m2, r, target);if (m1 >= t && m1 < b && matrix[m1][l] <= target && m2 - 1 >= l && m2 - 1 < r && matrix[b - 1][m2 - 1] >= target)r3 = f(matrix, m1, b, l, m2, target);if (m1 < b && m1 >= t && m2 >= l && m2 < r && matrix[m1][m2] <= target && matrix[b - 1][r - 1] >= target)r4 = f(matrix, m1, b, m2, r, target);return r1 || r2 || r3 || r4;}};
0 0
- Leetcode 240. Search a 2D Matrix II (Medium) (cpp)
- 【LeetCode】240. Search a 2D Matrix II (Medium)
- Leetcode 240. Search a 2D Matrix II[medium]
- [Leetcode 240, Medium] Search a 2D Matrix II
- 【LeetCode】(240)Search a 2D Matrix II(Medium)
- Medium:Search a 2D Matrix II
- 题解——Leetcode 240. Search a 2D Matrix II 难度:Medium
- #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
- c语言基础
- Java反射中getXXX和getDeclaredXXX的解析
- final,finally,finalize的区别
- Linux_Ubuntu_openwrt_编译环境准备
- javax.mail.AuthenticationFailedException: 550
- 【LeetCode】240. Search a 2D Matrix II (Medium)
- BFS广度优先搜索(5)(亦可以用DFS)--hdu1241(poj1562)(基础题)
- 397.Longest Increasing Continuous Subsequence-最长上升连续子序列(容易题)
- 9.13总结
- Leetcode解题报告:215. Kth Largest Element in an Array
- java项目从win上布署到linux上报java.lang.ArrayIndexOutOfBoundsException错误
- Linux_Ubuntu_openWrt源码目录结构
- Linux 命令:wget
- mysql数据库设计小技巧