@@ -313,54 +313,36 @@ func threeSum(nums []int)[][]int{
313313javaScript:
314314
315315``` js
316- /**
317- * @param {number[]} nums
318- * @return {number[][]}
319- */
320-
321- // 循环内不考虑去重
322- var threeSum = function (nums ) {
323- const len = nums .length ;
324- if (len < 3 ) return [];
325- nums .sort ((a , b ) => a - b);
326- const resSet = new Set ();
327- for (let i = 0 ; i < len - 2 ; i++ ) {
328- if (nums[i] > 0 ) break ;
329- let l = i + 1 , r = len - 1 ;
330- while (l < r) {
331- const sum = nums[i] + nums[l] + nums[r];
332- if (sum < 0 ) { l++ ; continue };
333- if (sum > 0 ) { r-- ; continue };
334- resSet .add (` ${ nums[i]} ,${ nums[l]} ,${ nums[r]} ` );
335- l++ ;
336- r-- ;
337- }
338- }
339- return Array .from (resSet).map (i => i .split (" ," ));
340- };
341-
342- // 去重优化
343316var threeSum = function (nums ) {
344- const len = nums .length ;
345- if (len < 3 ) return [];
346- nums .sort ((a , b ) => a - b);
347- const res = [];
348- for ( let i = 0 ; i < len - 2 ; i ++ ) {
349- if (nums[i] > 0 ) break ;
350- // a去重
351- if (i > 0 && nums[i] === nums[i - 1 ]) continue ;
352- let l = i + 1 , r = len - 1 ;
317+ const res = [], len = nums .length
318+ // 将数组排序
319+ nums .sort ((a , b ) => a - b)
320+ for ( let i = 0 ; i < len; i ++ ) {
321+ let l = i + 1 , r = len - 1 , iNum = nums[i]
322+ // 数组排过序,如果第一个数大于0直接返回res
323+ if (iNum > 0 ) return res
324+ // 去重
325+ if (iNum == nums[i - 1 ]) continue
353326 while (l < r) {
354- const sum = nums[i] + nums[l] + nums[r];
355- if (sum < 0 ) { l++ ; continue };
356- if (sum > 0 ) { r-- ; continue };
357- res .push ([nums[i], nums[l], nums[r]])
358- // b c 去重
359- while (l < r && nums[l] === nums[++ l]);
360- while (l < r && nums[r] === nums[-- r]);
327+ let lNum = nums[l], rNum = nums[r], threeSum = iNum + lNum + rNum
328+ // 三数之和小于0,则左指针向右移动
329+ if (threeSum < 0 ) l++
330+ else if (threeSum > 0 ) r--
331+ else {
332+ res .push ([iNum, lNum, rNum])
333+ // 去重
334+ while (l < r && nums[l] == nums[l + 1 ]){
335+ l++
336+ }
337+ while (l < r && nums[r] == nums[r - 1 ]) {
338+ r--
339+ }
340+ l++
341+ r--
342+ }
361343 }
362344 }
363- return res;
345+ return res
364346};
365347```
366348TypeScript:
0 commit comments