首页 > 其他 > 详细

3Sum

时间:2015-05-27 02:07:39      阅读:222      评论:0      收藏:0      [点我收藏+]

Given an array?S?of?n?integers, are there elements?a,?b,?c?in?S?such that?a?+?b?+?c?= 0? Find all unique triplets in the array which gives the sum of zero.

Note:

  • Elements in a triplet (a,b,c) must be in non-descending order. (ie,?a?≤?b?≤?c)
  • The solution set must not contain duplicate triplets.

?

For example, given array S = {-1 0 1 2 -1 -4},

    A solution set is:
    (-1, 0, 1)
    (-1, -1, 2)

public class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
    	List<List<Integer>> list = new ArrayList<List<Integer>>();
    	Arrays.sort(nums);
    	Set<ArrayList<Integer>> set = new HashSet<ArrayList<Integer>>();
    	for (int i = 0; i < nums.length-2; i++) {
    		int a = nums[i];
    		int start = i+1;
    		int end = nums.length-1;
    		while (start < end) {
    			int b = nums[start];
    			int c = nums[end];
    			if (a+b+c == 0) {
    				ArrayList<Integer> t = new ArrayList<Integer>();
    				t.add(a);
    				t.add(b);
    				t.add(c);
    				set.add(t);
    				start++;
    				end--;
    			} else if (a+b+c < 0) {
    				start++;
    			} else {
    				end--;
    			}
    		}
    	}
    	list.addAll(set);
    	return list;
    }
}
?

3Sum

原文:http://hcx2013.iteye.com/blog/2214593

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!