Leetcode 240. Search a 2D Matrix II
2016-09-08 00:52
537 查看
这道题是同学问我的时候看到的,抱着solo的心态也做了一遍
第一次用的是二分和分治(刚好今晚老师也讲了分治)
然而效果好像不太佳?
先放一发题目:
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 in ascending from left to right.
—Integers in each column are sorted in ascending from top to bottom.
第一次解题的思路就是二分查找,从中间的元素开始,根据中间元素和target的大小情况来判断下一步搜索哪个范围的矩阵。
好hin气啊这个代码我自己都觉得复杂,虽然AC了但是最后的分布图居然排在末尾2%
EXM????
然后虚心(?)请教了某大神,在大神的指点下,茅塞顿开,撸了一个不用二分的算法(本来就不用吧啊咧)
代码的基本思想是从右上角或者左下角开始搜索,因为从这两个方向向内搜索可以根据大小关系一次排除一列或者一行,这样比二分快了不知道多少倍(:зゝ∠)
第一次用的是二分和分治(刚好今晚老师也讲了分治)
然而效果好像不太佳?
先放一发题目:
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 in ascending from left to right.
—Integers in each column are sorted in ascending from top to bottom.
第一次解题的思路就是二分查找,从中间的元素开始,根据中间元素和target的大小情况来判断下一步搜索哪个范围的矩阵。
代码1
class Solution { public: bool searchMatrix(vector<vector<int> >& matrix, int target, int left, int up, int right, int down) { if (left < 0 || left > right) return false; else if (up < 0 || up > down) return false; else if (right < 0 || right > matrix[0].size() - 1) return false; else if (down < 0 || down > matrix.size() - 1) return false; if (matrix[(up + down) / 2][(left + right) / 2] == target) return true; else if (matrix[(up + down) / 2][(left + right) / 2] > target) return searchMatrix(matrix, target, left, up, (left + right) / 2 - 1, down) || searchMatrix(matrix, target, (left + right) / 2, up, right, (up + down) / 2 - 1); else return searchMatrix(matrix, target, left, (up + down) / 2 + 1, (left + right) / 2, down) || searchMatrix(matrix, target, (left + right) / 2 + 1, up, right, down); } bool searchMatrix(vector<vector<int> >& matrix, int target) { return searchMatrix(matrix, target, 0, 0, matrix[0].size() - 1, matrix.size() - 1); } };
好hin气啊这个代码我自己都觉得复杂,虽然AC了但是最后的分布图居然排在末尾2%
EXM????
然后虚心(?)请教了某大神,在大神的指点下,茅塞顿开,撸了一个不用二分的算法(本来就不用吧啊咧)
代码的基本思想是从右上角或者左下角开始搜索,因为从这两个方向向内搜索可以根据大小关系一次排除一列或者一行,这样比二分快了不知道多少倍(:зゝ∠)
代码2
class Solution { public: bool searchMatrix(vector<vector<int> > &matrix, int target) { int up = 0, right = matrix[0].size() - 1; while (up < matrix.size() && right >= 0) { int ele = matrix[up][right]; if(ele == target) return true; else if(ele > target) --right; else ++up; } return false; } };
相关文章推荐
- [Leetcode] 240. Search a 2D Matrix II 解题报告
- leetcode_middle_56_240. Search a 2D Matrix II
- Leetcode:240. Search a 2D Matrix II (week 11)
- [LeetCode] 240. Search a 2D Matrix II 搜索一个二维矩阵 II
- LeetCode - 74. Search a 2D Matrix & 240. Search a 2D Matrix II
- 题解——Leetcode 240. Search a 2D Matrix II 难度:Medium
- leetcode题解-74. Search a 2D Matrix && 240. Search a 2D Matrix II
- Leetcode240. Search a 2D Matrix II
- [leetcode] 240.Search a 2D Matrix II
- [leetcode]240. Search a 2D Matrix II
- Leetcode 240. Search a 2D Matrix II[medium]
- leetcode 240. Search a 2D Matrix II
- [leetcode]240. Search a 2D Matrix II
- Divide and Conquer -- Leetcode problem240. Search a 2D Matrix II
- Leetcode 240. Search a 2D Matrix II
- LeetCode 240. Search a 2D Matrix II
- Leetcode 240. Search a 2D Matrix II (Medium) (cpp)
- LeetCode 240. Search a 2D Matrix II
- LeetCode 240. Search a 2D Matrix II
- leetcode 240. Search a 2D Matrix II