LeetCode_18---4SUM

4Sum

  Total Accepted: 36049  Total Submissions: 166531 My Submissions

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)

翻译:

    Code:


    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.List;
    
    /**
     * @author MohnSnow
     * @time 2015年6月4日 下午5:48:15
     * 
     */
    public class LeetCode18 {
    
    	/**
    	 * @param argsmengdx
    	 *            -fnst
    	 */
    	//460msA---只是前面3SUM的翻版
    	public static List<List<Integer>> fourSum(int[] nums, int target) {
    		int len = nums.length;
    		List<List<Integer>> list = new ArrayList<List<Integer>>();
    		HashSet<List<Integer>> set = new HashSet<List<Integer>>();
    		Arrays.sort(nums);
    		//System.out.println(Arrays.toString(nums));
    		for (int i = 0; i < len - 3; i++) {
    			for (int j = i + 1; j < len - 2; j++) {
    				for (int m = j + 1, n = len - 1; m < n;) {
    					//System.out.println("111111111");
    					if (nums[i] + nums[j] + nums[m] + nums[n] == target) {
    						//System.out.println("22222");
    						List<Integer> aList = new ArrayList<Integer>();
    						aList.add(nums[i]);
    						aList.add(nums[j]);
    						aList.add(nums[m]);
    						aList.add(nums[n]);
    						if (set.add(aList))
    							list.add(aList);
    						m++;
    						n--;
    					} else if (nums[i] + nums[j] + nums[m] + nums[n] - target < 0) {
    						//System.out.println("33333");
    						m++;
    					} else {
    						//System.out.println("444444");
    						n--;
    					}
    				}
    			}
    		}
    		return list;
    	}
    
    	public static void main(String[] args) {
    		int[] strs2 = { 5, 5, 3, 5, 1, -5, 1, -2 };
    		int a = 4;
    		System.out.println(fourSum(strs2, a));
    	}
    
    }
    








    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值