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

文章目录


题目链接: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);
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值