74. Search a 2D Matrix

Posted Machelsky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了74. 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.

思路:从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;
    }
}

 

以上是关于74. Search a 2D Matrix的主要内容,如果未能解决你的问题,请参考以下文章

74. Search a 2D Matrix

74. Search a 2D Matrix

74. Search a 2D Matrix

74. Search a 2D Matrix

74. Search a 2D Matrix

74. Search a 2D Matrix