详细代码+详细注释
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输入时,会先刷新缓冲区,然后再输出结果。而使用这行代码可以解除绑定,提高输入输出的速度。