LeetCode Search a 2D Matrix(二分查找法)
2015-07-16 23:01
393 查看
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 =
题意:给出一个矩阵,第一行的元素从小到大排序,每一行的第一个元素比前一行的最后一个元素大,用有效的算法求是否可以找到数target
思路:以每一行来二分查找
代码如下
public class Solution {
private int lower_bound(int[] arrays, int target)
{
int left = 0, right = arrays.length;
int mid;
while (left < right)
{
mid = (left + right) >> 1;
if (arrays[mid] >= target) right = mid;
else
{
left = mid + 1;
}
}
return left;
}
public boolean searchMatrix(int[][] matrix, int target)
{
int m = matrix.length;
int n = m > 0 ? matrix[0].length : 0;
for (int i = 0; i < m; i++)
{
int left = lower_bound(matrix[i], target);
if (left >= n) continue;
if (matrix[i][left] == target) return true;
else return false;
}
return false;
}
}
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.
题意:给出一个矩阵,第一行的元素从小到大排序,每一行的第一个元素比前一行的最后一个元素大,用有效的算法求是否可以找到数target
思路:以每一行来二分查找
代码如下
public class Solution {
private int lower_bound(int[] arrays, int target)
{
int left = 0, right = arrays.length;
int mid;
while (left < right)
{
mid = (left + right) >> 1;
if (arrays[mid] >= target) right = mid;
else
{
left = mid + 1;
}
}
return left;
}
public boolean searchMatrix(int[][] matrix, int target)
{
int m = matrix.length;
int n = m > 0 ? matrix[0].length : 0;
for (int i = 0; i < m; i++)
{
int left = lower_bound(matrix[i], target);
if (left >= n) continue;
if (matrix[i][left] == target) return true;
else return false;
}
return false;
}
}
相关文章推荐
- Memcache技术分享:介绍、使用、存储、算法、优化、命中率
- 屏幕适配
- POJ 1064 Cable master (二分 分数化整数)
- LOL
- 【西祠日志】【02】
- Java中equals和==的区别
- 2015071602 - 夏季养生
- C语言中结构体的声明方式
- 2.4 成员初始化列表
- 开放与封闭
- 2015071601 - 楼梯
- 输入两个字符串,从第一个字符串中删除第二个字符串中出现过的所有字符
- map 按照值排列
- 二分查找(模板)
- Redis数据类型--hash
- python中strip,lstrip,rstrip简介
- 跟我学数据结构之算法初步概念
- [转]MATLAB函数大全
- 遍历对象的可枚举属性
- 来深工作一周总结