统计公平数对的数目(C++ 排序 双指针)

详细代码+详细注释

class Solution {
public:
    //请看补充
    int fast_io = []() {
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        return 0;
    }();

    long long countFairPairs(vector<int>& nums, int lower, int upper) {
        //将数组排序
        sort(nums.begin() , nums.end());

        //双指针
        //将数组排序后,我们只需要获得满足小于upper条件的数对个数
        //和满足小于lower - 1条件的数对个数
        //两者相减即可获得答案
        long long b = count(nums , upper);
        long long a = count(nums , lower - 1);
        return b - a;
    }

    long long count(vector<int>& nums , int value){
        int len = nums.size();
        int l = 0 , r = len - 1;
        long long ans = 0;

        while(l < r){
            if(nums[l] + nums[r] <= value){
                //因为nums递增,l是固定的
                //所以nums[l + 1] + nums[r] <= value都满足条件的
                //总共r - l组
                ans += r - l;
                l += 1;
            }else{
                r -= 1;
            }
        }
        return ans;
    }
};

补充:

这是一种优化输入输出流的方式,通常在使用C++进行大量输入输出操作时会遇到效率问题。具体来说,这段代码的作用有以下几点:

  •  ios::sync_with_stdio(0);:这一行代码用于同步C++标准输入输出流与C标准库的输入输出流。默认情况下,C++的输入输出流与C标准库的输入输出流是独立的,而使用这行代码可以将它们进行同步,提高输入输出的速度。
  • - cin.tie(0);:这一行代码用于解除C++的输入流与输出流之间的绑定。默认情况下,C++的输入流和输出流是绑定在一起的,即每次使用cout输出时,会先刷新缓冲区,然后再接受输入。而使用这行代码可以解除绑定,提高输入输出的速度。
  • - cout.tie(0);:这一行代码用于解除C++的输出流与输入流之间的绑定。默认情况下,C++的输出流和输入流是绑定在一起的,即每次使用cin输入时,会先刷新缓冲区,然后再输出结果。而使用这行代码可以解除绑定,提高输入输出的速度。

一些双指针题解

三数之和(排序,双指针,Java版+详细注释)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值