leetcode #74 in cpp

原创 2016年06月01日 00:09:25

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

leetcode #32 in cpp

Given a string containing just the characters '(' and ')', find the length of the longest valid (we...

leetcode #114 in cpp

Given a binary tree, flatten it to a linked list in-place. For example, Given 1 ...

leetcode #160 in cpp

Write a program to find the node at which the intersection of two singly linked lists begins. F...

Leetcode 285. Inorder Successor in BST (Medium) (cpp)

Leetcode 285. Inorder Successor in BST (Medium) (cpp)

leetcode #98 in cpp

Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined...

leetcode #37 in cpp

The question is to solve a Sudoku. Solution: We scan through the Sudoku. Whenever we meet a '.', w...

leetcode #77 in cpp

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exa...

leetcode #139 in cpp

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa...

leetcode #18 in cpp

The question is similar to 3sum. And how to solve it is thus very similar to the solution of 3sum.  ...

leetcode #44 in cpp

Solution:  We use DP to solve this problem.  Initialize bool dp[pattern length + 1][ s length + 1]...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)