[LeetCode] Search a 2D Matrix
2015-09-05 21:00
531 查看
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 =
分析:首先选取右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。
参考资料:《剑指offer》面试题3
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.
分析:首先选取右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。
参考资料:《剑指offer》面试题3
class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.empty()) return false; int total_row = matrix.size(); int total_col = matrix[0].size(); int row = 0; int col = total_col - 1; while (row < total_row && col >= 0 ) { if (matrix[row][col] == target) { return true; } else if (matrix[row][col] > target) { col--; } else { row++; } } return false; } };
相关文章推荐
- 关于VS2010 C#使用DirectX的问题[英]
- C++技术点积累(1)
- (1.4.6.2)中位数
- 1008. 数组元素循环右移问题 (20)
- vim
- hdu5427(BestCoder Round #54 (div.2)1001题)
- 混合编程杂谈续——发布
- Varnish实现Web缓存
- 【C++】嵌套类、友元
- 常见的链表面试题大汇总:
- Android实践——密码本SecretBook
- VC commands and tools
- 1.居家环境参数监测系统介绍
- web开发与正则表达式
- 实现购物结算功能
- Android四种Activity的加载模式(转)
- [算法专题] stack
- hdu5290树形dp
- Linux命令详解(7):文件内容查阅命令
- UVa 1225 Digit Counting