zoukankan      html  css  js  c++  java
  • 【LeetCode】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)
    public class Solution {
        public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) {
            ArrayList<ArrayList<Integer>> re = new ArrayList<ArrayList<Integer>>();
            Map<ArrayList<Integer>,Integer> map = new HashMap<ArrayList<Integer>,Integer>();
            ArrayList<Integer> ai = new ArrayList<Integer>();
            if(num.length<=3)
                return re;
            Arrays.sort(num);
            for(int i=0;i<num.length-3;i++){
                
                ai = new ArrayList<Integer>();
                ai.add(num[i]);
                int tar = target-num[i];
                for(int j=i+1;j<num.length-2;j++){
                    int temp = num[j];
                    ai = new ArrayList<Integer>();
                    ai.add(num[i]);
                    ai.add(temp);
                    int tt = tar-temp;
                    int start = j+1;
                    int end = num.length-1;
                    while(end>start){
                        if(num[start]+num[end]==tt){
                            ai.add(num[start]);
                            ai.add(num[end]);
                            map.put(ai, 1);
                            ai=new ArrayList<Integer>();
                            ai.add(num[i]);
                            ai.add(temp);
                            start++;
                            end--;
                            continue;
                        }
                        if(num[start]+num[end]>tt){
                            end--;
                            continue;
                        }
                        if(num[start]+num[end]<tt){
                            start++;
                            continue;
                        }
                    }
                }
                
            }
            re.addAll(map.keySet());
            return re;
            
        }
    }
  • 相关阅读:
    小程序登陆流程解析
    小程序连续点击bug解决
    小程序开发文本空格的添加
    微信小程序转支付宝小程序
    支付宝小程序开发入门
    微信小程序开发入门
    text属性
    小程序横向滚动
    will-change
    Docker 系列二(操作镜像).
  • 原文地址:https://www.cnblogs.com/yixianyixian/p/3746508.html
Copyright © 2011-2022 走看看