您的位置:首页 > 其它

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: