代码随想录算法训练营第七天| 454、383、15、18

454.四数相加II 


文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:0.5h

思路:用两个for循环遍历前两个数组,用不重复map存放所有的两个数之间的和以及出现次数,再用两个for循环遍历后面两个数组,计算所有和的负数,在map中如果找到了该和,最后的结果加上map中记录的次数。

代码:

图1



 383. 赎金信  

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:0.5h

思路:和242题的思路一样。

代码:

图2



 15. 三数之和 

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:1.5h

思路:首先把数组排序,用一层循环遍历数组,每次遍历的数字之后的数组序列,用一个left指针从左往右走,一个right指针从右往左走,当两个指针指向数字的和小于0,表示三数之和小了,left指针右走一步,大于0则相反,相等的话处理结果次数后两个指针相向而行,直到指针相遇。

代码:

图3

注:题目中去重的逻辑是最麻烦的:

(1) 如果使用

图4 去重1

   会导致漏掉-1,-1,2,因为num[i]等于第一个-1时,会因为这个条件跳过第一个-1而指向第二个-1,left就是从第二个-1右边开始,从而导致漏掉-1,-1,2。

(2) 如果把

图5 去重2

    放在while循环刚开始,则会导致漏掉0,0,0,left或right从刚开始就会跳过所有0。


18. 四数之和  

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:1.5h

思路:和三数之和的思路大体相同,只不过外层变成了双层for循环,并且去重的注意逻辑也是相同的。

代码:

图6
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容