题目描述:
给你一个按 非递减顺序 排列的数组 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;
}
}