3sum
Posted stAr_1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3sum相关的知识,希望对你有一定的参考价值。
直接上代码
import java.util.*; /** * Created by lvhao on 2017/6/27. */ /** * * k sum问题最后都是转化为2sum问题,2sum问题的解法:排序之后双指针。 * 3sum:排序后先取出一个数,然后剩下的数为2sum问题,依次取完所有数,注意在取一个数时,它前边得数不用参与 * 2sum,因为会造成重复。例如a,b,c,d,e当取到c时,进行2sum时左指针一开始就是d,不用再考虑ab,因为之前已经计算过了。 * 同样的K sum可以逐渐转化为2sum * 时间复杂度:2sum:O(NlogN),3sum:O(N^2),4sum:O(N^3)..... */ public class Q15_3sum { public static void main(String[] args) { int[] nums = new int[]{-4,-2,1,-5,-4,-4,4,-2,0,4,0,-2,3,1,-5,0}; List<List<Integer>> res = new ArrayList<>(); Arrays.sort(nums); for (int i = 0; i < nums.length-2; i++) { int num = nums[i]; if(i != 0 && nums[i] == nums[i-1] ) continue; int l = i+1,r = nums.length-1,sum; while(l < r) { sum = nums[l] + nums[r]; if(sum == -num) { res.add(Arrays.asList(num,nums[l],nums[r])); while(l<r && nums[l] == nums[l+1]) l++; while(l<r && nums[r] == nums[r-1]) r--; l++; r--; } else if(sum > -num) r--; else l++; } } System.out.println(res); } }
以上是关于3sum的主要内容,如果未能解决你的问题,请参考以下文章