two sum
思路:
一次哈希,边哈希边检测另一个数字是否已经在dict中(二次哈希也可)
时间复杂度O(n) 空间复杂度O(n)
PS: 其实还可以先排序再双指针(沿用3sum的思路),这样操作时间复杂度O(nlogn)空间复杂度O(1)
import copy
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
d = {}
for i in range(len(nums)):
complement = target - nums[i]
# hash的时候检测另一个数字是否已存在,即使是重复数字还未覆盖也不影响
if complement in d.keys():
return [d[complement], i]
d[nums[i]] = i
return -1
three sum
思路:
- 先排序
- 第一个数字从头到尾扫描,
- 剩下两个数双指针得到。
时间复杂度 O(n^2) 空间复杂度O(1)
注意:题目中要求结果不重复,所以需要加上重复数字判断
(做的时候也有考虑过双指针+二分查找最后一个数,但是这样哪个指针移动无法判断)
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
res = []
if len(nums) < 3 or nums[0]>0:
return []
for i in range(len(nums)-2):
# 防止重复重复数字出现
if i != 0 and nums[i] == nums[i-1]:
continue
a = nums[i]
l = i + 1
r = len(nums) - 1
while l < r:
if nums[l] + nums[r] == 0 - a:
res.append([a, n

这篇博客详细介绍了使用Python解决2sum、3sum、4sum以及nsum问题的算法思路。对于2sum,提出了一次哈希和排序双指针两种方法,时间复杂度分别为O(n)和O(nlogn),空间复杂度分别为O(n)和O(1)。接着,博主讲解了3sum和4sum的解决方案,都是基于排序后的双指针,时间复杂度分别为O(n^2)和O(n^3),空间复杂度为O(1)。最后,讨论了nsum的解决方案,使用深度优先搜索来找到可能的解,时间复杂度为O(N^(K-1)),空间复杂度O(1)。
最低0.47元/天 解锁文章
1562

被折叠的 条评论
为什么被折叠?



