代码随想录算法刷题训练营第六天 | 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和

454.四数相加II

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:学透哈希表,map使用有技巧!LeetCode:454.四数相加II_哔哩哔哩_bilibili

 思路:四个数组,分别取一个元素合为零即可,只需要记录有几组.

如果4个for会很高的复杂度,如果让第一个成为哈希表,3个for,复杂度也太高,

两个两个进行操作,使复杂度降到On^2,先穷举前两个数组,放入哈希表,然后再遍历后两个,如果哈西表里面有就count加上他的value.

383. 赎金信

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

 思路:

判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成

字母用数组实现哈希表,用string.toCharArray(),第一个字符串里面字符对应--,第二个++,最后有小于零则false

15. 三数之和 

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:

 思路:三个数之和为零,先排序;

用双指针算法,第一个数a用遍历,第二第三个数bc用两个指针,一个从a之后开始,另一个从最后一个元素开始

初始化l,r之后,进行指针的移动寻找合为num的三元组,如果和大于0就r--,让和变小;如果和小于0,l++让和变大;否则就加入三元组到结果里

但是题目要求不重复的三元组,重复情况的发生是只要a或b或c相等,那么这个三元组就一模一样了,因此要对a b c去重,对a去重:如果a和他前一个的元素相等就continue;因为相等的两个数除了三元组中包含这两个相等元素的情况除外,另外的情况以及被前一个数算过了,所以这样可以去重

对b c 去重同理,也是判断和前一个是否相等

用到Arrays.asList(1,2,3)

18. 四数之和

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:难在去重和剪枝!| LeetCode:18. 四数之和_哔哩哔哩_bilibili

思路:和三数之和思路一样,先排序;

第一个第二个元素用两个for遍历的方法,两个指针

同样第二个元素也要加上去重,如果j>i+2,进行去重;

还有一个剪枝操作,第一个元素遍历的时候,如果他大于零并且大于target,那第一种元素这种情况下就直接退出

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值