文章目录
- 题目介绍
- 解法
题目介绍
解法
采用红蓝染色体法,具体介绍参考 红蓝染色体法
通过红蓝染色体法可以找到第一个大于大于target的位置,使所以本题可以找第一个大于0的位置,即负整数的个数;数组长度 - 第一个大于1的位置即正整数的个数。
class Solution {
public int maximumCount(int[] nums) {
int left = lowerBound(nums,0);
int right = lowerBound(nums,1) ;
return Math.max(left,nums.length - right);
}
public int lowerBound(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
}