Leetcode-18. 4Sum
来源:互联网 发布:酷宝数据 作假 编辑:程序博客网 时间:2024/06/03 21:34
前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。
博客链接:mcf171的博客
——————————————————————————————
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.Note: The solution set must not contain duplicate quadruplets.
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]]这个题目基本就是3Sum的进一步泛化,简单修改了之后时间效率为O(n^3),两层循环加一个两端逼近。Your runtime beats 3.95% of java submissions.
public class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { Arrays.sort(nums); List<List<Integer>> results = new ArrayList<List<Integer>>(); if(nums.length < 4 ) return new ArrayList(); if(nums.length == 4 && (nums[0] + nums[1] + nums[2] + nums[3]) == target){ List<Integer> result = new ArrayList<Integer>(); result.add(nums[0]); result.add(nums[1]); result.add(nums[2]); result.add(nums[3]); results.add(result); return results; } for(int i = 0 ; i < nums.length -3; i ++){ if (i == 0 || (i > 0 && nums[i] != nums[i-1])) { for(int j = i + 1; j < nums.length-2; j ++) { if (j == i+1 || nums[j] != nums[j-1]) { int l = j + 1, r = nums.length - 1; while (l < r) { List<Integer> result = new ArrayList<Integer>(); if ((nums[l] + nums[r] + nums[j] + nums[i]) > target ) r--; else if ((nums[l] + nums[r] + nums[j] + nums[i]) < target) l++; else { result.add(nums[l]); result.add(nums[r]); result.add(nums[i]); result.add(nums[j]); while (l < r && nums[l] == nums[l + 1]) l++; while (l < r && nums[r] == nums[r - 1]) r--; l++; r--; } if (result.size() != 0) results.add(result); } } } } } return results; }}
0 0
- LeetCode --- 18. 4Sum
- [Leetcode] 18. 4Sum
- leetcode 18. 4Sum
- 18. 4Sum LeetCode
- leetcode 18. 4Sum
- 【LeetCode】18. 4Sum
- LeetCode - 18. 4Sum
- leetcode 18. 4Sum
- Leetcode 18. 4Sum
- LeetCode 18. 4Sum
- 【leetcode】18. 4Sum
- leetcode 18. 4Sum
- [leetcode]18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- [LeetCode] 18. 4Sum
- LeetCode 18. 4Sum
- C++引用相关
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 软件工程视频总结
- 【学习笔记】数字证书,私钥——公钥
- [LeetCode]Divide Two Integers
- Leetcode-18. 4Sum
- 刷题笔记(Linux)
- 循环赛日程表问题
- Java 8 中的 Streams API 详解
- UVA 1153 Keep the Customer Satisfied(贪心2.0)
- 学习spring+mybatis感悟之怎样加快开发效率
- 生成一个0-N的随机数
- 画图板
- js实现List的部分功能