二分

寻找重复数

class Solution {
    public int findDuplicate(int[] nums) {
        int len = nums.length;
        int l = 1, r = len - 1;
        while (l < r) {
            int mid = (l + r) / 2;
            int count = 0;
            for (int num : nums) {
                if (num <= mid) {
                    count++;
                }
            }
            if (count > mid) {
                r = mid;
            }else {
                l = mid + 1;
            }
        }
        return l;
    }
}

搜索二维矩阵

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if (matrix[0][0] > target) return false;
        int m = matrix.length, n = matrix[0].length;
        int l = 0, r = m - 1;
        while (l < r) {
            int mid = l + r + 1>> 1;
            if (matrix[mid][0] <= target) {
                l = mid;
            }else {
                r = mid - 1;
            }
        }
        int row = r;
        if (matrix[r][0] == target) return true;
        l = 0;
        r = n - 1;
        while (l < r) {
            int mid = l + r + 1>> 1;
            if (matrix[row][mid] <= target) {
                l = mid;
            }else {
                r = mid - 1;
            }
        }
        if (matrix[row][r] == target) return true;
        return false;
    }
}

在排序数组中查找元素的第一个和最后一个位置

class Solution {
    public int[] searchRange(int[] nums, int target) {
        if (nums.length == 0) return new int[]{-1, -1};
        int l = 0, r = nums.length - 1;
        while (l < r) {
            int mid = l + r >> 1;
            if (nums[mid] >= target) {
                r = mid;
            } else {
                l = mid + 1;
            }
        }
        if (nums[r] != target) return new int[]{-1, -1};
        int left = r;
        l = 0;
        r = nums.length - 1;
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (nums[mid] <= target) {
                l = mid;
            } else {
                r = mid - 1;
            }
        }
        return new int[]{left, l};
    }
}
posted @ 2023-05-10 11:31  你在学什么  阅读(79)  评论(0)    收藏  举报