[Leetcode] Search a 2D Matrix

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.

 

Solution 1:

public class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int N=matrix.length-1;
        int M=matrix[0].length-1;
        int i=0;
        int j=M;
        while(j>=0&&i<=N){
            if(matrix[i][j]==target){
                return true;
            }else if(matrix[i][j]<target){
                ++i;
            }else{
                --j;
            }
        }
        return false;
    }
}

 

Solution 2:

2分法。

 1 public class Solution {
 2     public boolean searchMatrix(int[][] matrix, int target) {
 3         int min=0;
 4         int max=matrix[0].length*matrix.length-1;
 5         while(min<=max){
 6             int mid=(min+max)/2;
 7             int y=mid/matrix[0].length;
 8             int x=mid%matrix[0].length;
 9             if(matrix[y][x]==target)
10                 return true;
11             else if(matrix[y][x]>target){
12                 max=mid-1;
13             }else{
14                 min=mid+1;
15             }
16         }
17         return false;
18     }
19 }

 

posted @ 2014-11-15 17:21  Phoebe815  阅读(136)  评论(0编辑  收藏  举报