暴力法、一次哈希表和两次哈希表法
https://blog.csdn.net/zhushaojiecumt/article/details/102846196
视频:
https://www.bilibili.com/video/BV1Li4y1E7gT?p=1
双指针法
如果列表是无序的,需要先排序,使用双指针,分别指向头、尾。如果两数之和大于target,尾指针前移,如果两数之和小于target,首指针后移。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
r=zip(nums,range(len(nums)))
r = sorted(r, key=lambda x:x[0])
i, j=0,len(nums)-1
while i<j:
sum=r[i][0]+r[j][0]
if sum<target:
i+=1
elif sum>target:
j-=1
else:
break
return [r[i][1],r[j][1]]
leetcode——两数之和(暴力,一遍hash,两遍hash,双指针)
nums = list(enumerate(nums))
nums.sort(key = lambda x:x[1])
i,j = 0, len(nums)-1
while i < j:
if nums[i][1] + nums[j][1] > target:
j -= 1
elif nums[i][1] + nums[j][1] < target:
i += 1
else:
if nums[j][0] < nums[i][0]:
nums[j],nums[i] = nums[i],nums[j]
return num[i][0],nums[j][0]
https://zhuanlan.zhihu.com/p/203068013
扩展
假如不能用现成的hashMap结构,如何自己实现?
双指针法适用的问题有哪些?
两数之和、(接近)三数之和、四数之和的问题?
【leetcode 逐题讲解】 0001 Two sum 力扣 两数之和,讲解了如何实现hashMap