力扣 三数之和 python
时间: 2025-03-06 19:05:36 浏览: 47
力扣(LeetCode)是一家提供编程算法练习平台的网站,其中有一个经典的Python题目叫做“三数之和”(Three Sum),编号为437。这个问题是这样的:给定一个整数数组 nums ,找出所有和为0的非空子集。也就是说,找到三个数 a、b 和 c,使得 a + b + c = 0。
下面是一个简单的 Python 解决方案,它利用哈希表(字典)来存储每个数字以及它的索引,然后遍历数组,对于每个元素,检查是否存在另外两个元素与它相加等于目标值 `-nums[i]`:
```python
def threeSum(nums):
if not nums or len(nums) < 3:
return []
nums.sort() # 对数组排序
result = [] # 存储满足条件的子集
for i in range(len(nums)-1]: # 如果遇到重复元素,则跳过
continue
target = -nums[i]
# 使用二分查找寻找剩余元素
left, right = i+1, len(nums)-1
while left < right:
current_sum = nums[left] + nums[right]
if current_sum == target:
result.append([nums[i], nums[left], nums[right]])
left += 1 # 移动左指针,避免重复添加
while left < right and nums[left] == nums[left-1]:
left += 1 # 跳过重复元素
elif current_sum < target:
left += 1
else:
right -= 1
return result
# 示例
nums = [-1, 0, 1, 2, -1, -4]
print(threeSum(nums)) # 输出:[[-1, 0, 1], [-1, -1, 2]]
```
阅读全文
相关推荐




















