基础数据结构之哈希表:两数之和(LeetCode 1 简单题)
这是LeetCode的第一题,也是哈希表应用的经典例子。
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
优化思路
● 暴力解法: O(n²),两层循环
● 哈希表: O(n),用空间换时间,只需遍历一次
暴力解法
# 暴力解法
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:n = len(nums)for i in range(0,n-1):for j in range(i+1,n):if nums[i] + nums[j] == target:return[i,j]
哈希表
# 方法:数组中的每个数挨个看我的小本本上有没有记录让这俩数结合起来得到最终值,# 1.1有则说明这俩数已经找到了。# 1.2没则说明这个数还没,那我就存到小本子上,直到我所有的数都存到小本子上。
# 如果到所有数都记到本子上也没发现俩数满足要求,那说明这个数组就找不到
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hash = {}for i,num in enumerate(nums):completion = target - numif completion in hash:return [hash[completion],i]hash[num] = i
