454. 四数相加 II
题目链接:https://leetcode.cn/problems/4sum-ii/
0x1 看到题目的第一想法
几个哈希表?
0x2 自己实现过程中遇到哪些困难
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 遍历数组12,将和作为key,和出现的次数作为value,放入哈希表中;再遍历数组34,计算是否有满足等于-key的组合出现,如果有count加上value值;最终count即是符合条件的四元祖次数
0x5 今日收获,记录一下自己的学习时长
- 判断一个值是否出现过
- 哈希表
- 30min
383. 赎金信
题目链接:https://leetcode.cn/problems/ransom-note/
0x1 看到题目的第一想法
- 利用数组初始化一个大小为26的哈希表,统计magazine的每个字符出现的次数;遍历ransomNote,每出现一个字符就将对应的value-1;最后遍历哈希表,如果小于0的value,说明不能用magazine构成ransomNote
0x2 自己实现过程中遇到哪些困难
- No
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 一样的解法
0x5 今日收获,记录一下自己的学习时长
- 哈希表
- 数组
- 15min
15. 三数之和
题目链接: https://leetcode.cn/problems/3sum/
0x1 看到题目的第一想法
- 没想法
0x2 自己实现过程中遇到哪些困难
- python数组排序
1
nums.sort()
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 用哈希比较复杂,用双指针
- 使用双指针需要考虑各种情况
- 首先对数组进行排序。情况1)如果nums[0]>0,不可能存在三元组和为0,直接返回0;情况2)
1
2
3
4
5
6a = nums[i] b = nums[left] c = nums[right]
i in range(n-1)
对a进行去重,left = i + 1, right = 1
if(a+b+c>0) 说明大了,right往回缩 right -= 1
if(a+b+c<0) 说明小了,letf往前进 left += 1
if(a+b+c=0) 要对b和c进行去重,再双指针同时收缩right -= 1,left += 1
0x5 今日收获,记录一下自己的学习时长
求一个数组中所有和为0的三元组,而且元素不能重复
- 双指针
1h
18. 四数之和
题目链接:https://leetcode.cn/problems/4sum/
0x1 看到题目的第一想法
- 三指针?
0x2 自己实现过程中遇到哪些困难
- 注意target为任意值,三数之和的情况1在这里不存在
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 在三数之和的for循环里再嵌一个for循环
- 三数之和时间复杂度 O(n^3) -> O(n^2)
- 四数之和时间复杂度 O(n^4) -> O(n^3)
0x5 今日收获,记录一下自己的学习时长
双指针的使用可以使时间复杂度降低一个数量级
1h
待重点复习
454, 15, 18
总结
- 哈希表
- 数组,已知大小
- set(),未知大小,只有key
- {},key: value
- 双指针
- 三数之和
- 四数之和