4SUM Leetcode

本文探讨了如何求解给定整数数组中是否存在四个数相加等于目标值的问题,并给出了具体的JavaScript实现代码。通过先排序再使用双指针技巧,有效避免了重复解,实现了寻找所有唯一四元组的目标。

题目

Given an array S of n integers, are there elements a, b, c, 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: The solution set must not contain duplicate quadruplets.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.

  1. solution set is:

[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]

思路

这道题目和解决3sum的思路是一样的
思路是这样的,首先我们先不考虑去除重复的部分,把代码写出来,就很简单的用for循环,当判断最里面的两个数的时候用while循环.之后写出来了,在考虑怎么才能避免重复,就是跳过已经用过的数字就行了.

代码

var fourSum = function(nums, target) {
    let len = nums.length;
    if (nums.length < 4)
        return [];
    
    nums.sort(function(a, b){return a-b;});
    var res = [];
    
    for (let i = 0; i < len-3; i++) {
        if (i > 0 && nums[i] == nums[i-1]) 
            continue;

        for (let j = i+1; j < len-2; j++) {
            if (j > i + 1 && nums[j] == nums[j-1])
                continue;

            let lo = j+1, hi = len-1;
            let temp;
            while(lo < hi) {
                let sum = nums[i] + nums[j] + nums[lo] + nums[hi];
                if (sum == target) {
                    res.push([nums[i], nums[j], nums[lo], nums[hi]]);
                    temp = nums[lo];
                    while (lo < hi && temp == nums[lo])
                        lo++;
                    temp = nums[hi];
                    while (lo < hi && temp == nums[hi])
                        hi--;
                }
                else if (sum < target) {
                    lo++;
                }
                else {
                    hi--;
                }   
            }   
        }
    }
    return res;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值