在整理资料的时候,突然想起来还有个将近半年未更的博客。经历了这几个月惨无人道的秋招,终于明确自己最大的缺点: 问啥啥不会。痛定思痛之后,决定开始学习并记录,顺便恢复博客的更新。
(毕竟域名快到期了)
1. 两数之和
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9 |
方法一:
最先想到的自然是暴力双循环,时间复杂度为\(O(n^2)\),空间复杂度为\(O(1)\)
class Solution: |
方法二:
采用哈希表辅助的方法,时间复杂度为\(O(n)\),空间复杂度为\(O(n)\)
class Solution: |
总结:
方法一用的是暴力枚举法,分析一下思路可以知道寻找 nums[i] + nums[j] == target
项较为耗时。此时可以想到,常见的时间复杂度优化思路有空间换取时间。由此,可以采用哈希表储存 num_dict[target - nums[i]]
对应的数组索引,这样一来,寻找nums[i] + nums[j] == target
的耗时即为常数时间。
本题为经典的空间换取时间的优化方式。