原題**:
四元組(a, b, c, d)中,需要滿足a <= b <= c <= d
答案中不可以包含重複的四元組。
您在真實的面試中是否遇到過這個題? 是
和 target=0. 滿足要求的四元組集合為:
(-1, 0, 0, 1)
(-2, -1, 1, 2)
(-2, 0, 0, 2)
標籤排序
雜湊表兩根指標
陣列思路:沿用三數之和的方法,對陣列排序,然後固定兩個數,再設定兩個指標左右滑動,時間複雜度為o(n^3)。注意每個索引都要去除重複。
ac**:
classsolution
for (int j=i+1;j)
int left=j+1,right=n-1
;
while(leftif (right1&&numbers[right]==numbers[right+1
])
int sum=numbers[i]+numbers[j]+numbers[left]+numbers[right];
if (sum==target)
else
if (sumelse}}
}return
result;
}};
去除重複除了使用if——continue的方式,還可以用while迴圈:
while(left < right && numbers[left] == numbers[left+1])
while(left < right && numbe [right] == numbers[right-1])
此外,還可以用set,參考:
c++中set的用法
其他方法:雜湊表,通過增加空間複雜度來降低時間複雜度:
領扣LintCode問題答案 58 四數之和
領扣lintcode問題答案 58.四數之和 給乙個包含n個數的整數陣列s,在s中找到所有使得和為給定整數target的四元組 a,b,c,d 四元組 a,b,c,d 中,需要滿足a b c d 答案中不可以包含重複的四元組。樣例 1 輸入 2,7,11,15 3 輸出 樣例 2 輸入 1,0,1,...
LintCode 58 四個數之和
給乙個包含n個數的整數陣列s,在s中找到所有使得和為給定整數target的四元組 a,b,c,d 注意事項 四元組 a,b,c,d 中,需要滿足a b c d 答案中不可以包含重複的四元組。例如,對於給定的整數陣列s 1,0,1,0,2,2 和 target 0.滿足要求的四元組集合為 1,0,0,...
兩數之和 三數之和 四數之和
兩數之和意思就是 給你乙個陣列,從中找出兩個數字,讓他們的和等於乙個具體的target。找到所有這樣的兩個數。並且這兩個數字不能完全一樣。n數之和的意思是 給你乙個陣列,從中找出n個數字,讓他們的和等於乙個具體的target。找到所有這樣的n個數。並且這n個數字不能完全一樣。最基礎的,也是最關鍵的就...