单页面网站如何优化引流万能搜索引擎
数学推导:
lower <= nums[i] + nums[j] <= upper
且
0 <= i < j < n
则lower-nums[j]<=nums[i]<=upper-nums[j]
找到这个范围的nums[i]的个数就是我们要的值
所以枚举j 在0--(j-1)的范围内
找到第一个大于等于lower-nums[j]的下标
找到第一个大于upper-nums[j]的下标
相减后放入ans累加就是答案
class Solution {
public:long long countFairPairs(vector<int>& nums, int lower, int upper) {ranges::sort(nums);long long n=nums.size()-1;long long ans=0;for(int j=n;j>0;j--){//lower_bound和upper_bound都是左闭右开区间auto l=lower_bound(nums.begin(),nums.begin()+j,lower-nums[j]);auto r=upper_bound(nums.begin(),nums.begin()+j,upper-nums[j]);ans+=r-l;}return ans;}
};