演算法4Sum
fourSum:
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:
- Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ? b ? c ? d)
- The solution set must not contain duplicate quadruplets.
再多兩層迴圈,此時已經是n立方的時間效率了,嘗試了一下,居然也AC了。不知道還有沒有更高效的演算法。
- import java.util.ArrayList;
- import java.util.Arrays;
- public class FourSum {
-
private ArrayList
> list; -
public ArrayList
> fourSum( int[] num, int target) { -
list = new ArrayList
>(); - Arrays.sort(num);
- int i = 0;
- int j = 0;
- for (i = 0; i <= num.length - 4; i++) {
- if (i != 0 && num[i] == num[i - 1]) {
- continue;
- }
- for (j = i + 1; j <= num.length - 3; j++) {
- if (j != i + 1 && num[j] == num[j - 1]) {
- continue;
- }
- judgeAndPut(num, i, j, j + 1, num.length - 1, target);
- }
- }
- return list;
- }
- private void judgeAndPut(int[] num, int i, int j, int p, int q, int target) {
- while (p
- int sum = num[i] + num[j] + num[p] + num[q];
- if (sum
- p++;
- } else if (sum > target){
- q--;
- } else if (sum == target) {
-
ArrayList
tmpList = new ArrayList (); - tmpList.add(num[i]);
- tmpList.add(num[j]);
- tmpList.add(num[p]);
- tmpList.add(num[q]);
- list.add(tmpList);
- p++;
- q--;
- while (p 1]) {
- p++;
- }
- while (p 1]) {
- q--;
- }
- }
- }
- }
- public static void main(String[] args) {
- int num[] = {-1,0,1,0,-2,2};
- System.out.println(new FourSum().fourSum(num, 0));
- }
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29012686/viewspace-1153203/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 秒殺 2Sum 3Sum 4Sum 演算法題演算法
- Leetcode 4SumLeetCode
- Leetcode 18 4SumLeetCode
- [LeetCode] 4Sum 四數之和LeetCode
- 18. 4Sum(Leetcode每日一題-2020.10.05)LeetCode每日一題
- 【Leetcode】18. 4Sum 給定陣列中的4個元素之和等於給定值的所有組合LeetCode陣列
- 【演算法】KMP演算法演算法KMP
- 演算法-回溯演算法演算法
- 【JAVA演算法】圖論演算法 -- Dijkstra演算法Java演算法圖論
- 演算法(2)KMP演算法演算法KMP
- 【演算法】遞迴演算法演算法遞迴
- 演算法題:洗牌演算法演算法
- [演算法之回溯演算法]演算法
- Manacher演算法、KMP演算法演算法KMP
- 【演算法】KMP演算法解析演算法KMP
- 介面限流演算法:漏桶演算法&令牌桶演算法演算法
- 前端演算法:快速排序演算法前端演算法排序
- 演算法初探--遞迴演算法演算法遞迴
- BP演算法和LMBP演算法演算法
- 隨機演算法 概率演算法隨機演算法
- STL::演算法::常見演算法演算法
- 常用演算法 插值演算法演算法
- 前向分步演算法 && AdaBoost演算法 && 提升樹(GBDT)演算法 && XGBoost演算法演算法
- c/c++ 通用的(泛型)演算法 之 只讀演算法,寫演算法,排序演算法C++泛型演算法排序
- 介面限流演算法:漏桶演算法&令牌桶演算法&redis限流演算法Redis
- 什麼是演算法?如何學習演算法?演算法入門演算法
- 演算法金 | 突破最強演算法模型,決策樹演算法!!演算法模型
- 分類演算法-AdaBoot 演算法演算法boot
- 演算法(八):圖解KNN演算法演算法圖解KNN
- 演算法那些事之冒泡演算法演算法
- 基礎演算法之排序演算法演算法排序
- 最短路-SPFA演算法&Floyd演算法演算法
- 複習常用演算法_冒泡演算法演算法
- 常用演算法之貪心演算法演算法
- 演算法修養--A*尋路演算法演算法
- 演算法進階(8): EM演算法演算法
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 非對稱演算法----RSA演算法演算法