• 74. 搜索二维矩阵(二分)


    class Solution {
        // 两种二分模版
        public boolean searchMatrix(int[][] matrix, int target) {
            if(matrix.length == 0 || matrix[0].length == 0) return false;
            int m = matrix.length, n = matrix[0].length;
            int l = 0, r = m * n - 1;
            while(l <= r) { // 判断区间内所有点
                int mid = (l + r) >> 1;
                if(matrix[mid/n][mid%n] == target) return true;
                else if (matrix[mid/n][mid%n] < target) {
                    l = mid + 1;
                }  else {
                    r = mid - 1;
                }
            }
            return false;
        }
    
        public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix.length == 0 || matrix[0].length == 0) return false;
        int m = matrix.length, n = matrix[0].length;
        int l = 0, r = m * n - 1;
        while(l < r) {  // 注意二分的两种终止条件l < r 没有判断完成区间内所有点l == r情况
            int mid = (l + r) >> 1;
            if(matrix[mid/n][mid%n] == target) return true;
            else if (matrix[mid/n][mid%n] < target) {
                l = mid + 1; // l 小的话一直向右逼近
            }  else {
                r = mid;  // mid-1和mid都可以
            }
        }    // 退出循环继续判断
        return matrix[l/n][l%n] == target;
        }
    }
  • 相关阅读:
    C语言第三天,《常量指针和指针常量》
    树莓派系统烧入总结
    c 语言第一天
    7. Vue
    6. Vue
    5. Vue
    4. Vue
    3. Vue
    1. Vue
    2. Vue
  • 原文地址:https://www.cnblogs.com/yonezu/p/13269305.html
Copyright © 2020-2023  润新知