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

【LeetCode】Search a 2D Matrix

时间:2014-11-04 14:32:36      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   for   sp   strong   

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.

 

思路:纵向二分查找确定target所在行,再进行普通的二分查找。

class Solution {
public:
    bool searchMatrix(vector<vector<int> > &matrix, int target) {
        if(matrix.empty())
            return false;
        else if(matrix[0].empty())
            return false;
        else
        {
            int m = matrix.size();
            int n = matrix[m-1].size();
            //判断越界
            if(matrix[0][0] > target || matrix[m-1][n-1] < target)
                return false;
            
            
            //基于行首的二分查找,定位到行
            int low = 0;
            int high = m-1;
            int mid;
            int num;
            while(low <= high)
            {
                mid = (low+high)/2;
                num = matrix[mid][0];
                if(num == target)
                    return true;
                else if(num > target)
                    high = mid-1;
                else
                    low = mid+1;
            }
            //短路操防止越界
            if(low >= m || matrix[low][0] > target)
                low -= 1;
            int row = low;
            
            //第row行内进行二分查找
            low = 0;
            high = matrix[row].size()-1;
            while(low <= high)
            {
                mid = (low+high)/2;
                num = matrix[row][mid];
                if(num == target)
                    return true;
                else if(num > target)
                    high = mid-1;
                else
                    low = mid+1;
            }
            return false;
        }
    }
};

bubuko.com,布布扣

【LeetCode】Search a 2D Matrix

标签:style   blog   http   io   color   ar   for   sp   strong   

原文地址:http://www.cnblogs.com/ganganloveu/p/4073458.html

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