給定乙個包含 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]
]
做這題之前建議先做:三數之和, "三數之和"的題解。
使用暴力搜尋,但暴搜需要4層迴圈,時間複雜度為o(n^4),肯定會超時,而且暴力搜尋不能保證答案中不包含重複的四元組。
使用和三數之和類似的雙指標法。首先對陣列排序,然後確定兩個數字nums[i],nums[j],j>i,然後從j+1開始用雙指標left和right搜尋滿足條件的另外兩個數字。去重方法和「三數之和」中的去重方法也是類似的,確切的說是在「三數之和」上多了移動i和j的兩步。**如下:
class solution
sort(nums.begin(), nums.end());
for(int i=0; itarget)else);
while(left排序後雙指標法:如果nums[left]+nums[right]target,right--;nums[left]+nums[right]=target,left++,right--。迴圈直至left>=right.
排序後固定乙個數字nums[i],然後在[i+1,nums.size()-1]範圍內使用「兩數之和」中的方法尋找另外兩個數字。如果結果中不能有重複的三元組,則不能簡單地將left++或者right--,需要找到下乙個與當前指標指向值不同的指標。
排序後固定兩個數字nums[i],nums[j],j>i,然後在[j+1,nums.size()-1]範圍內用「兩數之和」的方法尋找另外兩個數字。如果結果中不能有重複的四元組,需要用類似的方法移動left,right,i,j。
1、三數之和:
LeetCode 四數之和
給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組 注意 答案中不可以包含重複的四元組。給定陣列 nums 1,0,1,0,2,2 和 tar...
leetCode四數之和
18.給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2...
Leetcode 兩數之和,三數之和,四數之和
兩數之和的思想比較簡單啦 就是 使用乙個map儲存其值,然後將其下標返回即可 三數之和 四數之和的思想比較類似,就是使用雙指標的思想 三數之和的 如下所示 四數之和的 如下 有一些優化 四數之和是在三數之和的基礎上增加了一層迴圈,class solution 獲取當前最大值 int max1 num...