zoukankan      html  css  js  c++  java
  • 【数组】4Sum

    题目:

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

    Note:

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

    思路:

    定义一对指针,指向两头。再定义一对指针,指向中间的两个元素。加起来看看跟target比较一下。决定内部指针怎么移动。
    注意结果可能出现重复的结果,需要做一下去重操作。
    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[][]}
     */
    var fourSum = function(nums, target) {
        var n=nums.length,temp=0,res=[];
        
        if(nums.length<4){
            return [];
        }
        
        nums.sort(function(a,b){return a-b;});
        
        for(var i=0;i<n-3;i++){
            for(var j=n-1;j>i+2;j--){
                temp=target-nums[i]-nums[j];
                var a=i+1,
                    b=j-1;
                while(a<b){
                    var sum=nums[a]+nums[b];
                    if(sum==temp){
                        var arr=[nums[i],nums[a],nums[b],nums[j]];
                        res[res.length]=arr;
                        a++;
                        b--;
                    }else if(sum<temp){
                        a++;
                    }else{
                        b--;
                    }
                }
            }    
        }
        
        return res.unique();
    };
    
    Array.prototype.unique = function(){
     var res = [];
     var json = {};
     for(var i = 0; i < this.length; i++){
      if(!json[this[i]]){
       res.push(this[i]);
       json[this[i]] = 1;
      }
     }
     return res;
    }
  • 相关阅读:
    Linux命令(一)
    数据库SQL学习(一)
    Eclipse
    VsCode支持的markdown语法参考(一)
    常用算法Tricks(一)
    dispose方法的使用
    收藏一个链接
    我还不知道取什么名字
    NioSocket的用法
    随便乱塞塞2~
  • 原文地址:https://www.cnblogs.com/shytong/p/5137972.html
Copyright © 2011-2022 走看看