标签:
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target = 3
, return true
.
思路:从top开始比较每一行的最后一个数,如果大于target,那么就在这一行。然后用binary search即可。
public class Solution { public boolean searchMatrix(int[][] matrix, int target) { int h=matrix.length-1; int l=matrix[0].length-1; int i=0; while(i<=h) { if(matrix[i][l]>=target) { int low=0; int high=matrix[0].length-1; while(low<=high) { int mid=low+(high-low)/2; if(matrix[i][mid]==target) { return true; } else if(matrix[i][mid]<target) { low=mid+1; } else { high=mid-1; } } return false; } i++; } return false; } }
Solution2:
discussion有种非常好的解法,相当于把matrix摊开,当作1d array来做。
长度=Row*Col
Index= matrix[mid/col][mid/row]
1 2 3 4- [2/4][2%4]
public class Solution { public boolean searchMatrix(int[][] matrix, int target) { int row=matrix.length,col=matrix[0].length; int l=0,r=row*col-1; while(l<=r){ int mid=(r+l)/2; if(matrix[mid/col][mid%col]==target){ return true; }else if(matrix[mid/col][mid%col]<target){ l=mid+1; }else{ r=mid-1; } } return false; } }
标签:
原文地址:http://www.cnblogs.com/Machelsky/p/5904915.html