Skip to content
Blogster on GitHub Dinesh on Twitter

2529. 正整数和负整数的最大计数

链接

思路

找到所有负整数的个数和正整数的个数,最终返回两者之间的最大值。题目所说是数组是有序的,换言之就是找到负整数和正整数的边界值,因为0不属于正整数和负整数,那么可以用0作为target进行二分查找。

可以将问题分解为,数组中存在0的时候和数组中不存在0的时候

  1. 当数组中存在0,并且有可能0的个数是多个的。进行两次二分找到边界值

4

  1. 当数组中不存在0,那么就是自然的找到第一个大于0的数字或者第一个小于0的数字

5

代码

class Solution {
    public int maximumCount(int[] nums) {
        int n = nums.length;
        int ans = Integer.MIN_VALUE;
        int left = 0;
        int right = n - 1;

        while (left < right) {
            int mid = (left + right) >> 1;
            if (nums[mid] >= 0) right = mid;
            else left = mid + 1;
        }

        if (nums[left] == 0) ans = Math.max(ans, left);
        else ans = Math.max(ans, n - left);

        left = 0;
        right = n - 1;
        while (left < right) {
            int mid = (left + right + 1) >> 1;
            if (nums[mid] <= 0) left = mid;
            else right = mid - 1;
        }

        if (nums[left] == 0) ans = Math.max(ans, n - 1 - left);
        else ans = Math.max(ans, left + 1);

        return ans;
    }
}