leetcode #74 in cpp

Solution: 

We could perform 2 binary searches. The first search is to locate the specific row which potentially contains the target. Once we find the row, we perform binary search in the row to find the target. 

Code:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size();
        int n = matrix[0].size();
        if(target < matrix[0][0] || target > matrix[m-1][n-1]) return false;
        
<span style="white-space:pre">	</span>int lower_row = 0;
        int upper_row = m-1;
        int mid_row;
        //search for the specific row. The row we are looking for has a range that the target could fall in. 
        //That is, the target should be larger than the first number and smaller than the last number in the row.
        while(lower_row <= upper_row){
            mid_row = (lower_row + upper_row) / 2;
            if(matrix[mid_row][0] <= target && matrix[mid_row][n-1] >= target){
                break;
            }
            if(matrix[mid_row][n-1] < target ){
                lower_row = mid_row + 1;
            }
            else{
                upper_row = mid_row - 1;
            }
        }
        if(lower_row > upper_row) return false;//if lower_row > upper_row, this means the specific row is not found, and thus there are no rows with range the target could fall in. We can termiante now. 
        
        int lower_col = 0;
        int upper_col = n - 1;
        int mid_col;
        //binary search through the columns in the row
        while(lower_col <= upper_col){
            mid_col = (lower_col + upper_col) /2;
            if(matrix[mid_row][mid_col] == target) return true;
            if(matrix[mid_row][mid_col] < target){
                lower_col = mid_col + 1;
            }else{
                upper_col = mid_col - 1;
            }
        }
        return false;
    }
};


阅读更多
文章标签: cpp leetcode
个人分类: interview
想对作者说点什么? 我来说一句

LeetCode cpp最新中文题解.pdf

2018年01月10日 866KB 下载

没有更多推荐了,返回首页

不良信息举报

leetcode #74 in cpp

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭