zoukankan      html  css  js  c++  java
  • [LeetCode][JavaScript]3Sum

    3Sum

    Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

    Note:

    • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
    • The solution set must not contain duplicate triplets.
        For example, given array S = {-1 0 1 2 -1 -4},
    
        A solution set is:
        (-1, 0, 1)
        (-1, -1, 2)

    https://leetcode.com/problems/3sum/


    一开始就想到暴力三重循环,提示说双指针。

    先要排序,这题的解法很依赖顺序。

    外层循环从头到尾,内层用双指针。

    内层每一轮将两指针指向的值和外层循环的值相加,如果相等说明找到了;如果小于0,头指针往后走;大于0尾指针往前。

    可以这样做就是基于已经排过序了。

     1 /**
     2  * @param {number[]} nums
     3  * @return {number[][]}
     4  */
     5 var threeSum = function(nums) {
     6     var res = [];
     7     nums = nums.sort(sorting);
     8 
     9     for(var i = 0; i < nums.length - 2; i++){
    10         if(nums[i - 1] !== undefined && nums[i - 1] === nums[i]){
    11             continue;
    12         }
    13         var curr = nums[i];
    14         var m = i + 1;
    15         var n = nums.length - 1;
    16         while(m < n){
    17             if(nums[m] + nums[n] + curr === 0){
    18                 res.push([curr, nums[m], nums[n]]);
    19                 while(m < n && nums[m] === nums[m + 1]){
    20                     m++;
    21                 }
    22                 while(m < n && nums[n] === nums[n - 1]){
    23                     n--;
    24                 }
    25                 m++; n--; 
    26             } else if(nums[m] + nums[n] + curr > 0){
    27                 n--;
    28             } else {
    29                 m++;
    30             }
    31         }
    32     }
    33     return res;
    34 
    35     function sorting(a, b){
    36         if(a > b){
    37             return 1;
    38         }else if(a < b){
    39             return -1;
    40         }else{
    41             return 0;
    42         }
    43     }
    44 };
  • 相关阅读:
    检测Linux硬盘IO数据
    获取OrangePI板子CPU温度
    ASP.Net开发WebAPI跨域访问(CORS)的精简流程
    一些常用复合命令
    关于Linux的虚拟内存管理
    Linux中组 与 用户的管理
    linux加载与使用ko驱动
    7z命令行 极限压缩指令
    nodejs的POST请求
    案例:用ajax 方法 解析xml
  • 原文地址:https://www.cnblogs.com/Liok3187/p/4540921.html
Copyright © 2011-2022 走看看