题目链接:LeetCode - 2529. 正整数和负整数的最大计数
解析
二分
- 找到负整数的右边界和正整数的左边界,计算多少即可。
- 需要注意的是左边界为0和右边界为数组长度的情况
- 左边界为0:有可能没有负数又有可能只有一个,所以需要判断
- 右边界为数组长度:同理。
AC CODE
int maximumCount(int* nums, int numsSize) {
int l = 0, r = numsSize - 1;
while(l < r){
int mid = (l + r + 1) >> 1;
if(nums[mid] >= 0) r = mid - 1;
else l = mid;
}
int ll = l;
l = 0, r = numsSize - 1;
while(l < r){
int mid = (l + r) >> 1;
if(nums[mid] >= 1) r = mid;
else l = mid + 1;
}
int rr = r;
if(nums[ll] == 0) ll = -1;
if(nums[rr] == 0) rr = numsSize;
return fmax(ll + 1, numsSize - rr);
}