Leetcode-search-a-2d-matrix
2016-07-04 14:10
337 查看
题目描述
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, returntrue.
题目旨在写一个高效的算法找出某一个元素,我也不知道什么算高效!
因为二维数组的规律是递增,并且上一行最后一个元素大于下一行第一个元素。
我的方法是不从第一个数往后比较,而是每次比较每一行最后一个数。
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
for(int i=0; i<matrix.length; i++){
for(int j=matrix[0].length-1; j>=0; j--){
if(matrix[i][j] == target)
return true;
else if(matrix[i][j] < target){
continue;
}
}
}
return false;
}
}
上述方法我认为是可以的。
我又学习了其他同学的做法,他就是用的二分法,我也学会了在二维数组中如何用二分查找!
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix==null || matrix.length==0 || matrix[0].length==0)
return false;
int m = matrix.length;
int n = matrix[0].length;
int low = 0;
int high = m*n - 1;
while(low <= high){
int mid = (low + high) / 2;
int midx = mid/n;
int midy = mid % n;
if(target == matrix[midx][midy]){
return true;
}else if(target < matrix[midx][midy]){
high = mid - 1;
}else {
low = mid + 1;
}
}
return false;
}
}
相关文章推荐
- FastJson的基本使用
- Mybatis xml报错: The content of elements must consist of well-formed character data or markup
- Leetcode Big Manipulation 解题报告
- css 文本和div垂直居中方法汇总
- 为什么要使用AOP
- 为什么要使用AOP
- UVa 1153 Keep the Customer Satisfied (贪心+优先队列)
- 携程工作感言(一)(6.30)
- iOS逆向Reveal查看任意app 的界面
- Objective-C学习之NSMutableArray中arraywithcapacity 和 initwithcapacity的区别?
- (4.2.32.2)android热修复之ClassLoader方式:Android 热补丁动态修复框架小结
- java设计模式
- button初始化
- 使用find命令进行查询拷贝
- 打印和删除文件
- 转换流
- Concurrent包学习之 BlockingQueue源码学习
- 2016.07.04,英语,《Vocabulary Builder》Unit 23
- windows向ubuntu过渡之常用软件安装
- HTML页面中直接加载其他JSP页面