leetcode #74 in cpp

来源:互联网 发布:javascript iframe src 编辑:程序博客网 时间:2024/06/05 06:24

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;    }};


0 0
原创粉丝点击