码迷,mamicode.com
首页 > 其他好文 > 详细

74. Search a 2D Matrix

时间:2016-09-25 09:28:15      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/Machelsky/p/5904915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!