454.四数相加II
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:0.5h
思路:用两个for循环遍历前两个数组,用不重复map存放所有的两个数之间的和以及出现次数,再用两个for循环遍历后面两个数组,计算所有和的负数,在map中如果找到了该和,最后的结果加上map中记录的次数。
代码:
383. 赎金信
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:0.5h
思路:和242题的思路一样。
代码:
15. 三数之和
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:1.5h
思路:首先把数组排序,用一层循环遍历数组,每次遍历的数字之后的数组序列,用一个left指针从左往右走,一个right指针从右往左走,当两个指针指向数字的和小于0,表示三数之和小了,left指针右走一步,大于0则相反,相等的话处理结果次数后两个指针相向而行,直到指针相遇。
代码:
注:题目中去重的逻辑是最麻烦的:
(1) 如果使用
会导致漏掉-1,-1,2,因为num[i]等于第一个-1时,会因为这个条件跳过第一个-1而指向第二个-1,left就是从第二个-1右边开始,从而导致漏掉-1,-1,2。
(2) 如果把
放在while循环刚开始,则会导致漏掉0,0,0,left或right从刚开始就会跳过所有0。
18. 四数之和
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:1.5h
思路:和三数之和的思路大体相同,只不过外层变成了双层for循环,并且去重的注意逻辑也是相同的。
代码: