zoukankan      html  css  js  c++  java
  • 18. 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: 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]
    ]

    此题和three sum比较类似,求法也差不多,直接上代码:

    public class Solution {

        public List<List<Integer>> fourSum(int[] nums, int target) {

            List<List<Integer>> res = new ArrayList<>();

            Arrays.sort(nums);

            for(int i=0;i<nums.length-3;i++){

                if(i!=0&&nums[i]==nums[i-1]) continue;

                for(int j=i+1;j<nums.length-2;j++){

                    if(j!=i+1&&nums[j]==nums[j-1]) continue;

                    int low = j+1,high = nums.length-1;

                    while(low<high){

                        int sum = nums[i]+nums[j]+nums[low]+nums[high];

                        if(sum<target){

                            low++;

                        }else if(sum>target){

                            high--;

                        }else{

                            res.add(Arrays.asList(nums[i],nums[j],nums[low],nums[high]));

                            while(low<high&&nums[low]==nums[low+1]) low++;

                            while(low<high&&nums[high]==nums[high-1]) high--;

                            low++;

                            high--;

                        }

                    }

                }

            }

            return res;

        }

    }

  • 相关阅读:
    操作系统第一章绪论
    JavaScript推断E-mail地址是否合法
    projecteuler----&gt;problem=8----Largest product in a series
    QQ聊天原理初识
    窗体和线程漫谈之工作线程怎样将数据的处理结果显示到窗体
    Swift
    iOS-UIApplication详解
    iOS开发拓展篇——如何把项目托管到GitHub
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6354106.html
Copyright © 2011-2022 走看看