[LeetCode] Search a 2D Matrix
来源:互联网 发布:java 重用锁 编辑:程序博客网 时间:2024/06/05 20:42
题目:
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:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]
Given target = 3
, return true
.
解答:
class Solution {public: bool searchMatrix(vector<vector<int> > &matrix, int target) { if(matrix.size() == 0 || matrix[0].size() == 0) { return false; } int m = matrix[0].size(); int n = matrix.size(); if(target < matrix[0][0] || target > matrix[n-1][m-1]) { return false; } int head, cur_1, cur_2, end; //第一轮二分查找 head = 0; end = n-1; while(head <= end) { cur_1 = (head+end)/2; if(matrix[cur_1][0] == target) { return true; } else if(matrix[cur_1][0] > target) { end = end - 1; } else if(matrix[cur_1][0] < target) { head = head + 1; } } if(target < matrix[cur_1][0]) { cur_1--; //由此得到的cur,即为第二轮二分查找的那一行 } //第二轮二分查找 head = 0; end = m -1; while(head <= end) { cur_2 = (head+end)/2; if(matrix[cur_1][cur_2] == target) { return true; } else if(matrix[cur_1][cur_2] > target) { end = end - 1; } else if(matrix[cur_1][cur_2] < target) { head = head + 1; } } return false; }};
思路:
我的做法是两次二分查找,先确定元素在哪一行,然后在这一行再进行二分查找。这种算法的效率不低,但是编码稍微有些困难。网上有一个经典的算法,虽然效率没有我这种算法高,但是简单易懂,便于编写:
class Solution { public: bool searchMatrix(vector<vector<int> > &matrix, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function int i = 0, j = matrix[0].size() - 1; while (i < matrix.size() && j >= 0) { if (target == matrix[i][j]) return true; else if (target < matrix[i][j]) j--; else i++; } return false; } };
0 0
- [leetcode][Search] Search a 2D Matrix
- LeetCode: Search a 2D Matrix
- LeetCode Search a 2D Matrix
- [Leetcode] Search a 2D Matrix
- LeetCode : Search a 2D Matrix
- [LeetCode] Search a 2D Matrix
- Leetcode 74 Search a 2D Matrix
- leetcode 90: Search a 2D Matrix
- [LeetCode]Search a 2D Matrix
- [Leetcode] Search a 2-D matrix
- [Leetcode]Search a 2D Matrix
- [leetcode]Search a 2D Matrix
- LeetCode-Search a 2D Matrix
- [leetcode] Search a 2D Matrix
- LeetCode - Search a 2D Matrix
- LeetCode:Search a 2D Matrix
- LeetCode 74: Search A 2D Matrix
- leetcode之Search a 2D Matrix
- IT缩略词解释
- android设置背景透明度
- ARM 7种处理器模式及功能
- 10步让你成为更优秀的程序员
- PHP--->基础
- [LeetCode] Search a 2D Matrix
- stl 统计一栋楼里的信息
- 在已有布局中动态添加控件
- Spiral Matrix
- linux下的一些小问题的小结
- 第1次实验——NPC问题(回溯算法、聚类分析)
- CentOS 注销在线用户
- 程序员的样子
- 文字还在,不会离开