LeetCode OJ-18-4Sum
来源:互联网 发布:sql嵌套循环语句 编辑:程序博客网 时间:2024/06/05 09:39
题目:
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.A solution set is:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]]
大意:
给定一个整数数组,找出a + b + c + d = target的唯一解。
思路:
先确定a和d的两个数,对于a和d两个数,不能同时重复使用。然后再确定b和c,同样这两个数也不能同时重复使用。找出所有满足条件的解,同时可以保证解不重复。
代码:
public class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> result = new LinkedList<>(); Arrays.sort(nums); if(nums == null || nums.length < 4) { return result; } //第一个数 for(int i = 0; i < nums.length - 3; i++) { //保证第一个数不重复 if(i > 0 && nums[i] == nums[i - 1]) { continue; } //第四个数 for(int j = nums.length - 1; j > i + 2; j--) { //保证第四个数不重复 if(j < nums.length - 1 && nums[j] == nums[j + 1]) { continue; } int start = i + 1;//第二个数 int end = j - 1;//第三个数 int n = target - nums[i] - nums[j]; while(start < end) { if(nums[start] + nums[end] == n) { List<Integer> cur = new ArrayList<>(); cur.add(nums[i]); cur.add(nums[start]); cur.add(nums[end]); cur.add(nums[j]); result.add(cur); //保证再次使用的第二个数不重复 do { start++; } while(start < end && nums[start] == nums[start - 1]); //保证再次使用的第三个数不重复 do { end--; } while(start < end && nums[end] == nums[end + 1]); } else if(nums[start] + nums[end] < n) { //保证再次使用的第二个数不重复 do { start++; } while(start < end && nums[start] == nums[start - 1]); } else { //保证再次使用的第三个数不重复 do { end--; } while(start < end && nums[end] == nums[end + 1]); } } } } return result; }}
转自:DERRANTCM博客
0 0
- LeetCode OJ-18-4Sum
- LeetCode OJ:4Sum
- LeetCode OJ 4Sum
- LeetCode OJ - 3Sum、3Sum Closest、4Sum
- LeetCode OJ:Path Sum
- LeetCode OJ:Combination Sum
- LeetCode OJ:3Sum
- LeetCode OJ:Two Sum
- LeetCode OJ : two sum
- LeetCode OJ -Two Sum
- LeetCode OJ - Combination Sum
- LeetCode OJ Combination Sum
- LeetCode OJ 3Sum
- LeetCode OJ Two Sum
- LeetCode OJ Path Sum
- [LeetCode OJ] Two Sum
- Two Sum LeetCode OJ
- LeetCode OJ - Two Sum
- android开发去掉顶部标题栏的方法
- 机器学习框架简介
- Framework中的Ril源码分析
- hadoop视频教程搜索,拿走不谢!
- eclipse加速之禁用JS、jsp等文件的语法验证
- LeetCode OJ-18-4Sum
- Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API
- MYSQL指南
- MFC实现贪吃蛇游戏之蛇的移动
- __declspec
- 【JavaScript】富文本编辑器UEditor与代码高亮插件SyntaxHighlighter整合,实现用户贴代码功能
- 获取Excel文档的版本(2003或者2007)
- JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
- PowerVR SDK