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

Search a 2D Matrix

时间:2014-11-15 18:29:01      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   sp   div   on   log   

你能用最快的速度找到矩阵中是否有我们想要的值吗。例如:

1 2 3

4 5 6

7 8 9

target = 9,return true,target=10,return false。ps:矩阵升序(左到右,上到下),但不一定是连续数字。

 

解法:

两次二分。

1. 一次二分找到给定的target可能在第几行

2. 第二次二分在那行找到是否有给定的target

class Solution {
public:
    bool searchMatrix(vector<vector<int> > &matrix, int target) 
    {
        int row = matrix.size();
        if (row == 0) return false;
        int col = matrix[0].size();
        
        int left = 0, right = row - 1;
        
        while(left <= right) // 第一次二分找到在right行
        {
            if (matrix[left][0] == target || matrix[right][0] == target)
                return true;
            else if (matrix[left][0] < target)
                left += 1;
            else if (matrix[right][0] > target)
                right -= 1;
        }
        if (right < 0) return false; // 这个判断不能少,否则会run time error  因为right可能是-1
        int l = 0, r = col - 1;
        while(l <= r) // 第二次在第right行中二分找知否有值
        {
            if (matrix[right][l] == target || matrix[right][r] == target)
                return true;
            else if (matrix[right][l] < target)
                l += 1;
            else if (matrix[right][r] > target)
                r -= 1;
        }
        return false;
    }
};

 

Search a 2D Matrix

标签:style   blog   io   color   ar   sp   div   on   log   

原文地址:http://www.cnblogs.com/higerzhang/p/4099565.html

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