首页 > 代码库 > 3sum
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。