题解采用了双指针技巧,通过设置一个指针i指向数组的起始位置,另一个指针j指向数组的末尾位置。通过比较两个指针所指元素的和与目标值的关系来调整指针的位置:如果两数之和大于目标值,则将右侧指针向左移动以减小和的值;如果两数之和小于目标值,则将左侧指针向右移动以增大和的值;如果两数之和等于目标值,就返回这两个元素。由于数组是有序的,这种方法能有效地找到目标组合。
时间复杂度: O(n)
空间复杂度: O(1)
from typing import List
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
i = 0 # 初始化左指针
j = len(nums) - 1 # 初始化右指针
while i < j: # 当左指针小于右指针时循环
s = nums[i] + nums[j] # 计算当前两指针指向值的和
if s > target: # 如果和大于目标值
j -= 1 # 移动右指针向左
elif s < target: # 如果和小于目标值
i += 1 # 移动左指针向右
else: # 如果和等于目标值
return [nums[i], nums[j]] # 返回结果
if __name__ == '__main__':
s = Solution()
print(s.twoSum([2, 7, 11, 15], 9)) # 示例调用和输出