題目描述
給定乙個包含 n 個整數的陣列nums
和乙個目標值target
,判斷nums
中是否存在四個元素 a,b,c 和 d ,使得a + b + c + d
的值與target
相等?找出所有滿足條件且不重複的四元組。
注意:
答案中不可以包含重複的四元組。
示例:
給定陣列 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
滿足要求的四元組集合為:
[ [-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
題解:
排序+雙指標。
與 三數之和 太像了,無非就是固定兩個數,剩下的兩個元素使用雙指標處理就行。
首先對nums
排序,這個可以方便我們後面的操作。
對於四元組(i, j, k, l)
,我們固定i
和j
,k
和l
分別從j + 1
和n - 1
開始執行以下操作:
判重:
同時,這題還有一些優化小技巧:
後面兩個好像優化效果不明顯。
時間複雜度:o(n
3)
o(n^3)
o(n3)
額外空間複雜度:o(1
)o(1)
o(1)
**:
class
solution
;sort
( nums.
begin()
, nums.
end())
;int t = nums[0]
+ nums[1]
+ nums[2]
+ nums[3]
;if( t > target )
return
; t = nums[n -1]
+ nums[n -2]
+ nums[n -3]
+ nums[n -4]
;if( t < target )
return
; vectorint>> ret;
for(
int i =
0; i < n -3;
++i ));
while
( k < l && nums[k]
== nums[k -1]
)++k;
while
( k < l && nums[l]
== nums[l +1]
)--l;}}
while
( j +
1< n -
2&& nums[j +1]
== nums[j]
)++j;}}
return ret;}}
;/*記憶體:12.5mb,擊敗:99.98%
*/
18 四數之和
給定乙個含有 n 個整數的陣列 s,數列 s 中是否存在元素 a,b,c 和 d 使 a b c d target 請在陣列中找出所有滿足各元素相加等於特定值 的不重複組合。注意 解決方案集不能包含重複的四元組合。例如,給定陣列 s 1,0,1,0,2,2 並且給定 target 0。示例答案為 1...
18 四數之和
給定乙個包含 n 個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與target相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 target ...
18 四數之和
給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 ...