[LeetCode] Search a 2D Matrix
2015-06-23 17:31
483 查看
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) {
//二分查找,将矩阵查找转化成线性查找
int m = matrix.size();
if(m==0){
return false;
}
int n = matrix[0].size();
if(n==0){
return false;
}
int start = 0, end = m*n-1;
while(start<=end){
int middle = (start + end)/2;
int x = middle / n;
int y = middle % n;
if(matrix[x][y]==target){
return true;
}else if(matrix[x][y]<target){
start = middle + 1;
}else{
end = middle - 1;
}
}
return false;
}
};
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++中拷贝构造函数的应用详解
- C++中引用(&)的用法与应用实例分析
- C++使用CriticalSection实现线程同步实例
- C++智能指针实例详解
- 解析C++ 浮点数的格式化输出