Bootstrap

【LC】2529. 正整数和负整数的最大计数(二分解法)

题目描述:

给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg ,返回 pos 和 neg二者中的最大值。

注意:0 既不是正整数也不是负整数。

解法:

本题除了可以用模拟计数的方法外,还可以使用二分法解答。

class Solution {
    public int maximumCount(int[] nums) {
        int n = nums.length;
        int left = findLeft(nums, 0);
        int right = findLeft(nums, 1);
        return Math.max(left, n - right);
    }
    private int findLeft(int[] nums, int target) {
        int n = nums.length;
        int left = 0, right = n - 1;
        while (left <= right) {
            int mid = left + (right - left >> 1);
            if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }
}

;