二分法2

发布于 2024-01-06  340 次阅读


经典二分法的写法

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:

1 3 5 7
10 11 16 20
23 30 34 60

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length;
        int n = matrix[0].length;

        int left = 0;
        int right = m*n - 1;
        int mid;
        while(left<=right){
            mid = (left+right)>>1;
            int i = mid/n;
            int j = mid%n;
            if(matrix[i][j]==target){
                return true;
            }
            else if(matrix[i][j]>target){
                right = mid-1;
            }
            else{
                left = mid+1;
            }
        }
        return false;
    }
}