力扣题目:454.四数相加II
刷题时长:20min
复杂度分析:O(n^2)
问题总结
- 题目要求无需去重,所以在最后计数时,一旦有满足条件的comp直接加上哈希表中出现过的次数即可,之后也无需变更哈希表内的次数值
本题收获
- 独立思考编码实现
力扣题目:383. 赎金信
刷题时长:5min
复杂度分析:O(1)
问题总结
- 使用dict实现哈希表费时费空间。此题全小写字母,可以映射到数组实现。
本题收获
- 可用数组进行优化,需留意题目的提示
力扣题目:15. 三数之和
刷题时长:暴力法15min,双指针法15min
复杂度分析:O(n^3),O(n^2)
问题总结
- 没能想到双指针法。想到用排序了,但是为答案去重,而非想到一开始对已给数组排序。
- 理解了i j k 的去重过程
本题收获
- 三层循环优化至一次遍历+双指针。当数组中需要优化运行复杂度的时候,可优先考虑排序/双指针/二分法。
- if和continue的区别:continue是下一个i 还存在有可能的情况, break是无论后面多少个i我们是确定不会再出现这样的情况了
- 理解手动去重方法
力扣题目:18. 四数之和
刷题时长:15min
复杂度分析:O(n^3) - 双循环遍历 O(n^2) +双指针 O(n)
问题总结
- 去重剪枝的分析逻辑不清,尤其是第二位如何去重
本题收获
- for循环+双指针法,可通用于五数之和,六数之和等等
- 哈希法:哈希表用dict的key存数组所有元素值,val存出现次数,以便答案去重。用三个for循环算出comp值,回哈希表找到对应元素在数组中出现过的次数,若出现次数大于答案前三个元素中出现的次数,则没有用到重复元素,可用于最终答案。
- 对比题目454的四数相加:此题要求在同一集合中找四个元素,输出答案的格式为列表,四元组内元素顺序无所谓,即每个四元组内元素组合不能重复。题454要求在四个独立集合中各找一个元素,输出答案的格式为元组,即四元组内元素顺序有所谓,无需考虑元素值重复问题。