(java)Leetcode-15. 3Sum
来源:互联网 发布:作品集网站 知乎 编辑:程序博客网 时间:2024/04/30 22:54
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 List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); List<List<Integer>> result = new ArrayList<List<Integer>>(); for(int i = 0; i < nums.length-2; i++){ if (nums[i] > 0) { return result; } if(i>=1 && nums[i] == nums[i-1]){ continue; } for(int j = i+1; j < nums.length-1; j++){ if(j>= i+2 && nums[j] == nums[j-1]){ continue; } for(int k = j+1 ; k < nums.length; k++){ if(k>=j+2 && nums[k] == nums[k-1]){ continue; } if(nums[i]+nums[j]+nums[k]<0){ continue; } else if(nums[i]+nums[j]+nums[k] == 0){ List<Integer> temp = Arrays.asList(nums[i],nums[j],nums[k]); result.add(temp); }else break; } } } return result; } public static void main(String[] args){ Solution sol = new Solution(); int[] aa = {-1,0,1,2,-1,-4}; List<List<Integer>> result = sol.threeSum(aa); for(List<Integer> list : result){ for(int in : list){ System.out.print(in+" "); } System.out.println(); } }
不过其实有很多情况可以排除不去考虑,从而节省很多时间。比如下面这个就很快了,思路很巧妙。
public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> result = new ArrayList<>(); int length = nums.length; if (length < 3) { return result; } Arrays.sort(nums); for (int i = 0; i < length - 2; i++) { if (nums[i] > 0) { return result; } if (i == 0 || nums[i] != nums[i - 1]) { int target = -nums[i]; int low = i + 1, high = length - 1; while (low < high) { if (nums[high] < 0 || nums[low] > target) { break; } if (nums[low] + nums[high] == target) { result.add(Arrays.asList(nums[i], nums[low], nums[high])); while(++low<high && nums[low] == nums[low-1]); while(low<--high && nums[high] == nums[high+1]); } else if (nums[low] + nums[high] < target) { while(++low<high && nums[low] == nums[low-1]); } else { while(low<--high && nums[high] == nums[high+1]); } } } } return result; }
0 0
- (java)Leetcode-15. 3Sum
- leetcode-Java-15. 3Sum
- [LeetCode-Java]15. 3Sum
- [LeetCode] 15. 3Sum java
- [Leetcode] 3Sum (Java)
- [LeetCode][Java] 3Sum
- LeetCode : 3Sum [java]
- Java-LeetCode-3Sum
- 3Sum java leetcode
- leetcode 3Sum(Java)
- 3 Sum leetcode java
- Leetcode 15. 3Sum (Medium) (java)
- [leetcode]15. 3Sum(Java实现)
- [LeetCode Java] 15 3 Sum
- [LeetCode][Java] 3Sum Closest
- [leetcode-15]3Sum(java)
- (java)leetcode 3sum cloest
- LeetCode 3Sum 求和 java
- hadoop2.5集群迁移namenode
- PawnChess
- c++作业6
- Arduino入门(二)
- SDUT 3257 Cube Number 素数筛的应用加强版 立方数的性质
- (java)Leetcode-15. 3Sum
- Matika版OpenStack伪生产环境部署-创建网络
- application/octet-stream
- 使用golang实现telnet远程登录
- json解析原理
- 九度 OJ 1054:字符串内排序
- 2016-05-25 margin-right jsp获取页面流变量 文字颜色
- 合并排序
- 多线程编程艺术(3)-多线程等待通知编程模型