sn
abcd
sabc
dnote:ab
cd)the solution set must not contain duplicate quadruplets.
for example, given array s = , and target = 0.a solution set is:
(-1, 0, 0, 1)
(-2, -1, 1, 2)
(-2, 0, 0, 2)
給定乙個n個數的陣列s,判斷存在不存在這樣的a,b,c,d使a+b+c+d=target,找出所有的符合條件的值,注意,必須滿足a<=b<=c<=d,舉個例子說,比如陣列s=target=0,
那麼答案是(-1, 0, 0, 1)(-2, -1, 1, 2) (-2, 0, 0, 2)。
演算法思路:① 這個題和上兩篇文章三個數的和類似上兩篇用的是窮舉演算法,這次總不能再用窮舉吧,下面是比較好理解時間複雜度又**設計():比較小的一種演算法。
② 首先對陣列進行排序,設定兩個for迴圈,作為四個數中的前兩個數,有可能有兩個相同的數,遇到相同的數跳過,這樣做是為了避免重複。
③ 四個數中的後兩個數怎麼辦,通過設定兩個指標m和n,m從陣列前往後進行遍歷,n用來從陣列後往前進行遍歷。m>=n是結束迴圈的條件。
④ 遇到target==a+b+c+d的數就加到arraylist中.
1class
solution
3738}39
}40}41
return
arraylist;42}
43 }
此演算法參考了不過他是用c++實現,其思想是一樣的。2013-10-20
week4 B 四個數列
zjm 有四個數列 a,b,c,d,每個數列都有 n 個數字。zjm 從每個數列中各取出乙個數,他想知道有多少種方案使得 4 個數的和為 0。當乙個數列中有多個相同的數字的時候,把它們當做不同的數對待。input 第一行 n 代表數列中數字的個數 1 n 4000 接下來的 n 行中,第 i 行有四...
week4 B 四個數列
zjm 有四個數列 a,b,c,d,每個數列都有 n 個數字。zjm 從每個數列中各取出乙個數,他想知道有多少種方案使得 4 個數的和為 0。當乙個數列中有多個相同的數字的時候,把它們當做不同的數對待。請你幫幫他吧!輸入輸出格式input 第一行 n 代表數列中數字的個數 1 n 4000 接下來的...
Week4 B 四個數列
zjm 有四個數列 a,b,c,d,每個數列都有 n 個數字。zjm 從每個數列中各取出乙個數,他想知道有多少種方案使得 4 個數的和為 0。當乙個數列中有多個相同的數字的時候,把它們當做不同的數對待。第一行 n 代表數列中數字的個數 1 n 4000 接下來的 n 行中,第 i 行有四個數字,分別...