LeetCode 3Sum
来源:互联网 发布:美国大学人工智能专业排名 编辑:程序博客网 时间:2024/04/29 19:41
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)题意:给出一个数组,求所有三个数之和为0的组合
与LeetCode 4Sum(backtrace+剪枝)相似
代码如下:
class Solution { private void kSum(int[] nums, int start, int k, int target, List<Integer> arr, List<List<Integer>> ans) { int len = nums.length; if (start >= len || 0 == k) return; if (1 == k) { for (int i = start; i < len; i++) { if (nums[i] == target) { arr.add(nums[i]); ans.add(new ArrayList<Integer>(arr)); arr.remove(arr.size() - 1); } } return; } if (2 == k) { int end = len - 1; while (start < end) { int sum = nums[start] + nums[end]; if (sum == target) { arr.add(nums[start]); arr.add(nums[end]); ans.add(new ArrayList<Integer>(arr)); arr.remove(arr.size() - 1); arr.remove(arr.size() - 1); while (start < end && nums[start] == nums[start + 1]) start++; start++; while (start < end && nums[end] == nums[end - 1]) --end; --end; } else if (sum < target) { while (start < end && nums[start] == nums[start + 1]) start++; start++; } else { while (start < end && nums[end] == nums[end - 1]) end--; end--; } } return; } if (k * nums[start] > target || k * nums[len - 1] < target) return; for (int i = start; i <= (len - k); i++) { if (i > start && nums[i] == nums[i - 1]) continue; if (k * nums[i] <= target) { arr.add(nums[i]); kSum(nums, i + 1, k - 1, target - nums[i], arr, ans); arr.remove(arr.size() - 1); } } } public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> ans = new ArrayList<List<Integer>>(); List<Integer> arr = new ArrayList<Integer>(); Arrays.sort(nums); kSum(nums, 0, 3, 0, arr, ans); return ans; }}
0 0
- 【Leetcode】3Sum (Sum)
- Leetcode:2Sum,3Sum
- 【Leetcode】3Sum Closest (Sum)
- leetcode 2 sum 3sum 4sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- [LeetCode] 2Sum, 3Sum, 4Sum, 3SUm closet
- [LeetCode] K sum(2Sum、3Sum、4Sum)
- leetcode--sum集合:2sum,3sum,4sum
- leetcode --- 2 sum , 3 sum , 4 sum , k sum problem
- LeetCode: 3Sum
- LeetCode: 3 Sum Closest
- leetcode - 3 Sum
- leetcode - 3 sum closest
- leetcode 3Sum
- leetcode 3Sum Closest
- LeetCode: 3Sum
- 唱吧中国首推VR直播,剑指VR内容短板
- Kettle本机编译
- POJ 2386 深度搜索
- php学习之基础记录(1)
- 保证统计信息的准备性
- LeetCode 3Sum
- 机器学习算法(2)-K-means
- APP创业者必知的H5、微信开发、APP优缺点分析
- 负载均衡的几种常用方案
- 学习邮件,利用Spring+Velocity
- 报错 sal.h(2367): error
- Delphi XE8 用HttpClient下载文件
- 常见C++笔试题目整理(含答案)
- 深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计-ICCV 2015