java算法之3Sum
来源:互联网 发布:win10软件卸载不了 编辑:程序博客网 时间:2024/05/16 19:37
例题: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.
一、思路最简单的算法就是遍历,时间复杂度会很高,为O(N*N*N)
public class Solution { public List<List<Integer>> threeSum(int[] nums) { int len = nums.length; List<Integer> inlist; List<List<Integer>> outlist = new ArrayList<List<Integer>>(); for(int i=0;i<len-2;i++){ for(int j=i+1;j<len-1;j++){ for(int k=j+1;k<len;k++){ if(nums[i]+nums[j]+nums[k]==0){ inlist = new ArrayList<Integer>(); inlist.add(nums[i]); inlist.add(nums[j]); inlist.add(nums[k]); Collections.sort(inlist); if(!outlist.contains(inlist)) outlist.add(inlist); } } } } return outlist; }}
二、降低时间复杂度到O
public class Solution { public List<List<Integer>> threeSum(int[] nums) { int len = nums.length; Arrays.sort(nums);//首先排序 List<List<Integer>> outlist = new ArrayList<List<Integer>>(); for(int i=0;i<len-2;i++){ while(i>0 && nums[i]==nums[i-1] && i<len-2)//跳过相同的元素 i = i+1; int j= i+1; int k = len-1; while(j<k){ if(nums[i]+nums[j]+nums[k] == 0) outlist.add(Arrays.asList(nums[i], nums[j], nums[k])); j++; k--; while(nums[j]==nums[j-1] && j<k){ //跳过相同的元素 j++; } while(nums[k]==nums[k+1] && j<k){ //跳过相同的元素 k--; } } else if(nums[i]+nums[j]+nums[k] > 0){ k--; } else{ j++; } } } return outlist; }}
0 0
- java算法之3Sum
- java算法之简单的Two Sum
- 每日算法之十四:3Sum
- java算法实现之Sum of Two Integers
- leetcode 3sum算法
- 算法-3Sum问题
- 3Sum算法
- 3Sum Closest算法
- 【算法】2SUM/3SUM/4SUM问题
- 每日算法之十六:4sum
- 每日算法之三十一:Combination Sum
- leetcode算法题总结之Two Sum
- 简单算法题之 Two Sum
- leetcode 216 Combination Sum III java 算法
- Leetcode之3Sum
- leetcode之3Sum
- LeetCode之3Sum
- leetcode之3Sum
- WordCount v2.0结合个人理解进行注释
- SQL注入的例子
- 指针使C威力无穷!
- CodeForces
- local function definitions are illegal
- java算法之3Sum
- spark 总结
- android缓存清理
- CSS常见属性
- dskinlite(uieasy)使用交流
- html 不要在未完成的标签内操作此标签
- [iBET Malaysia] Live Casinos 0.75% Rebate Bonus
- 三国佚事——巴蜀之危 (sdut oj)
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较