首页 > 试题广场 >

四数之和

[编程题]四数之和
  • 热度指数:1247 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度是 n 的数组 nums ,和一个目标值 target,请你找出不重复的四元组 [nums[a],nums[b],nums[c],nums[d]] (如果四元组的元素一一对应则只输出其中一组)
同时四元组要满足 各不相同,
你可以按任意顺序输出

数据范围:
示例1

输入

[2,0,-2,3,-3,0],0

输出

[[2,-2,0,0],[3,-3,0,0],[2,-2,3,-3]]
function fournumber( nums ,  target ) {
    // write code here
    nums.sort((a, b) => a-b);
    let res = [];
    let max = nums.length-1;
    let i = 0;
    let num1 = nums[i];
    while(i < nums.length - 3) {
        let i2 = i + 1;
        let l = i2 + 1;
        let h = max;
        while(i2 < nums.length - 2){
            let num2 = nums[i2];
            let low = nums[l];
            let high = nums[h];
            while(l < h) {
                if(num1 + num2 + low + high == target) {
                    res.push([num1, num2, low, high]);
                    while(nums[l] == low) {l++;}
                    while(nums[h] == high) {h--;}
                    low = nums[l];
                    high = nums[h];
                } else if (num1 + num2 + low + high < target) {
                    while(nums[l] == low) {l++;}
                    low = nums[l];
                } else if (num1 + num2 + low + high > target) {
                    while(nums[h] == high) {h--;}
                    high = nums[h];
                }
            }
            while(nums[i2] == num2) {i2++;}
            l = i2 + 1;
            h = max;
        }
        while(num1 == nums[i]) {i++;}
        num1 = nums[i];
    }
    return res;
}

发表于 2022-06-04 19:07:05 回复(0)