要解决这个问题,我们需要理解几个基础概念:
给定一个有序数组 arr
和一个参数 k
,我们需要找到所有大于或等于 k
的两个数字的和的计数。
我们可以使用双指针法来解决这个问题。具体步骤如下:
left
和 right
,分别指向数组的起始位置和结束位置。count
来记录满足条件的元素对的数量。left
和 right
,直到它们相遇:arr[left] + arr[right] >= k
,则说明从 left
到 right
之间的所有元素与 arr[right]
的和都大于或等于 k
,因此可以将 right - left
加到 count
中,并将 right
左移一位。left
右移一位。count
。def count_pairs(arr, k):
left, right = 0, len(arr) - 1
count = 0
while left < right:
if arr[left] + arr[right] >= k:
count += right - left
right -= 1
else:
left += 1
return count
# 示例
arr = [1, 2, 3, 4, 5]
k = 5
print(count_pairs(arr, k)) # 输出: 6
left
指向数组的起始位置,right
指向数组的结束位置。left
小于 right
时,进行以下操作:arr[left] + arr[right] >= k
,则从 left
到 right
之间的所有元素与 arr[right]
的和都大于或等于 k
,因此将 right - left
加到 count
中,并将 right
左移一位。left
右移一位。count
。通过这种方法,我们可以在 O(n) 的时间复杂度内解决这个问题,效率较高。
领取专属 10元无门槛券
手把手带您无忧上云