74. 搜索二维矩阵

74. 搜索二维矩阵

题目描述

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104

思路分析

典型的二分法问题。现在第一列中搜索,找到taget可能在的那一行,然后在这一行中再次进行二分搜索。

对于第一次二分搜索,结果偏向于往上,例如在题目给的例子中,要寻找11所在的行,找到的得是第二行而不能是第三行。因此设定了

mid=(left+right+1)/2,

left=mid,

right=mid-1

这种转移设定可以保证实现以上效果。

同样的

mid=(left+right-1)/2,

left=mid+1,

right=mid

可以实现结果偏于向下。

代码实现

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int  top=0,bottom=matrix.size()-1;
        while(top<bottom)
        {
            int mid=(top+bottom+1)/2;
            if(matrix[mid][0]==target)
                return true;
            if(target>matrix[mid][0])
                top=mid;
            else
                bottom=mid-1;
        }
        int left=0,right=matrix[0].size()-1;
        while(left<right)
        {
            int mid=(left+right-1)/2;
            if(matrix[top][mid]==target)
                return true;
            if(target>matrix[top][mid])
                left=mid+1;
            else
                right=mid;
        }
        return matrix[top][left]==target;
    }

};

74. 搜索二维矩阵

上一篇:Go_02_值类型&引用类型


下一篇:zabbix启用snmptrap