LeetCode : 3Sum [java]
来源:互联网 发布:西安信利软件 编辑:程序博客网 时间:2024/05/02 00:29
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)
思路:首先从小到大排序,第一层循环确定第一个数,相同的只取一次(第一次出现那个位置的),然后,寻找第2个和第3个数,保证第2个数比第3个数小,使用两个指针从两侧进行扫描,发现和为0即记录,直到指针相遇,改变第一个数,继续扫描。
import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Solution { public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> list = new ArrayList<List<Integer>>();if (nums.length < 3) {return list;}Arrays.sort(nums);for (int i = 0; i < nums.length; i++) {if (i >= 1 && nums[i] == nums[i - 1]) {continue;}int j = i + 1;int k = nums.length - 1;while (j < k) {int sum = nums[i] + nums[j] + nums[k];if (sum > 0) {while (k > j && k <= nums.length - 2 && nums[k] == nums[k - 1]) {k--;}k--;} else if (sum < 0) {while (j < k && j >= 1 && nums[j] == nums[j + 1]) {j++;}j++;} else {List<Integer> interList = new ArrayList<>();interList.add(nums[i]);interList.add(nums[j]);interList.add(nums[k]);list.add(interList);while (j < k && j >= 1 && nums[j] == nums[j + 1]) {j++;}j++;}}}return list; }}
1 0
- [Leetcode] 3Sum (Java)
- [LeetCode][Java] 3Sum
- LeetCode : 3Sum [java]
- Java-LeetCode-3Sum
- 3Sum java leetcode
- leetcode 3Sum(Java)
- 3 Sum leetcode java
- [LeetCode Java] 15 3 Sum
- [LeetCode][Java] 3Sum Closest
- [leetcode-15]3Sum(java)
- (java)leetcode 3sum cloest
- LeetCode 3Sum 求和 java
- LeetCode : 3Sum Closest [java]
- (java)Leetcode-15. 3Sum
- leetcode-Java-15. 3Sum
- 3Sum Leetcode Python Java
- [LeetCode-Java]15. 3Sum
- [LeetCode] 15. 3Sum java
- POJ 2010 Moo University - Financial Aid (优先队列/二分答案)
- jQuery总结
- 简化脚本
- Linux系统运维/正则表示法/6-1
- 项目2:就拿胖子说事---(1)计算并输出标准体重
- LeetCode : 3Sum [java]
- Java 抽象类与接口区别
- fzu2092收集水晶 记忆化搜索
- wordpress 3步历史图片加水印
- 无法启动此程序,因为计算机中丢失MFC42D.DLL。尝试重新安装该程序以解决此问题
- HDU—— 2005 第几天? (java版)
- lazy 延迟加载策略
- 项目总结之关于系统通讯录的操作
- 六种方式实现hibernate查询