题目:给定一个递增的,含有重复元素的整型数组,求任意两个元素和为target的元素的组合数,
例:[1,1,2,4,4,6,7,7], 求任意两个元素和为8的元素组合数
func count(arr []int, target int) {
left, right := 0, len(arr) - 1
ans := 0
for left < right {
val := arr[left] + arr[right]
if val == target {
// 由于存在重复的元素,需要计算左右各自有多少重复的
lcnt, rcnt := 1, 1
left++
right--
for left < len(arr) - 1 && arr[left] == arr[left-1] {
lcnt++
left++
}
for right >= 0 && arr[right] == arr[right+1] {
rcnt++
right--
}
// 左边的个数*右边的个数得到组合数
ans += lcnt * rcnt
} else val > target {
right--
} else {
left++
}
}
return ans
}