zoukankan      html  css  js  c++  java
  • 四数之和

    题目:

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

    注意:

    答案中不可以包含重复的四元组。

    示例:

    给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

    满足要求的四元组集合为:
    [
    [-1, 0, 0, 1],
    [-2, -1, 1, 2],
    [-2, 0, 0, 2]
    ]

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[][]}
     */
    
    function comp(a,b){
        return a- b;
    }
    var fourSum = function(nums, target) {
        nums.sort(comp);
        let temp =[];
        let sum = 0;
        for(let i=0;i<nums.length;i++){
             if(i>0&&nums[i]==nums[i-1]) continue;
            for(let j=i+1;j<nums.length;j++){
                if(j>i+1&&nums[j]==nums[j-1]) continue;
                let left = j+1;
                let right = nums.length-1;
                while(left<right){
                    sum = nums[i]+nums[j]+nums[left]+nums[right];
                    if(sum == target){
                        temp.push([nums[i],nums[j],nums[left],nums[right]]);
                        while(left<right&&nums[left]==nums[left+1]) left++;
                        while(left<right&&nums[right]==nums[right-1]) right--;
                        left++;
                        right--;
                    }else if(sum <target){
                        left++;
                    }else{
                        right--;
                    }
                }
            }
        } 
        return temp;
    };
    View Code

    实现:与之前的三树之和基本相同,只需要在外层再添加一层循环即可,注意(   if(j>i+1&&nums[j]==nums[j-1]) continue;   )  这里是和前一个数比较是否相同,如果相同就将说明之前已经循环过一样的数据了,可以跳过当前元素向下执行,如果写成(   if(j>i+1&&nums[j]==nums[j+1]) continue;   )  和后一个数相加来比较,其向后移动一个元素之后造成,从当前元素到最后一个元素的个数小于4,,出现了问题。所以应该是和前一个进行比较。

    果然需要按标签来进行学习,这样更有效。

    来源:https://leetcode-cn.com/problems/4sum/solution/shuang-zhi-zhen-jie-fa-can-zhao-san-shu-zhi-he-ge-/

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/4sum
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    CRM4.0多组织安装和设置
    如何找回你的VirtualPC2007控制台
    线性表
    时间复杂度
    栈与队列
    字符串排序问题
    浙江企业网喜讯之一
    初次体验到C#范型的魅力
    ajax 或 js 异步判断用户名是否存在
    html基础知识1(基本标签)20170307
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11650259.html
Copyright © 2011-2022 走看看