忘记哪天的每日
补一下
2563. Count the Number of Fair Pairs
给一个array : nums,长度为n
再给两个数字lower、upper
从array中任意选两个数字nums[i]、nums[j]
这两个数字要满足 lower<=nums[i]+nums[j]<upper
请问这样的组合有几组?
思路:
先将nums进行排序
在建立一个count function
作用是找出nums中两个数字总和小于target的组合有几组
在count function中
令l=0、r=nums.length-1
如果nums[l]+nums[r]<target,l就+1
且回传值加上r-l
如果nums[l]+nums[r]>=target,r就-1
这样count function就完成了
接着回传count(upper+1)-count(lower)就是答案
golang code :
func countFairPairs(nums []int, lower int, upper int) int64 {
slices.Sort(nums)
return int64(count(upper+1, nums) - count(lower, nums))
}
func count(target int, nums []int) int {
l, r, res := 0, len(nums)-1, 0
for r > l {
sum := nums[l] + nums[r]
if sum >= target {
r