📅  最后修改于: 2023-12-03 15:12:41.942000             🧑  作者: Mango
给定整数数组 arr
和整数 X
,找到其中一组数,使得它们的和等于 X
。数组中的每个元素最多只能使用一次。如果存在多个解,则返回任意一个。
实现函数:
def find_pair(arr: List[int], X: int) -> List[int]:
pass
arr
:长度为 $n$ 的整数数组 $(1 \leq n \leq 10^5)$,数组中的元素大小均不超过 $10^5$。X
:整数 $(1 \leq X \leq 2 \cdot 10^5)$。[a, b]
:返回两个整数的列表,满足 $a+b = X$。如果不存在这样的数对,则返回 []
。首先将数组排序,然后使用双指针,一个指向数组的起始位置,一个指向数组的末尾位置。如果两个指针所指向的数字之和等于 X
,则返回这两个数字;如果两个数字之和小于 X
,则将左指针向右移动;如果两个数字之和大于 X
,则将右指针向左移动。直到找到满足要求的数字对,或者左右指针相遇。
时间复杂度为 $O(n \log n)$,空间复杂度为 $O(1)$。
from typing import List
def find_pair(arr: List[int], X: int) -> List[int]:
arr.sort()
left = 0
right = len(arr) - 1
while left < right:
if arr[left] + arr[right] == X:
return [arr[left], arr[right]]
elif arr[left] + arr[right] < X:
left += 1
else:
right -= 1
return []
arr = [1, 2, 3, 4, 5]
X = 9
print(find_pair(arr, X)) # [4, 5]
arr = [2, 7, 11, 15]
X = 9
print(find_pair(arr, X)) # [2, 7]
arr = [3, 3]
X = 6
print(find_pair(arr, X)) # [3, 3]
arr = [3, 3, 3]
X = 9
print(find_pair(arr, X)) # [3, 3]
arr = [1, 2, 3, 4, 5]
X = 10
print(find_pair(arr, X)) # []