給定乙個包含 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]
]
class
solution
/*對陣列進行從小到大排序*/
arrays.
sort
(nums)
;/*陣列長度*/
int length=nums.length;
/*定義4個指標k,i,j,h k從0開始遍歷,i從k+1開始遍歷,留下j和h,j指向i+1,h指向陣列最大值*/
for(
int k=
0;k3;k++
)/*獲取當前最小值,如果最小值比目標值大,說明後面越來越大的值根本沒戲*/
int min1=nums[k]
+nums[k+1]
+nums[k+2]
+nums[k+3]
;if(min1>target)
/*獲取當前最大值,如果最大值比目標值小,說明當前num[k]這個數無論加上哪三個數都不會與目標值相等忽略*/
int max1=nums[k]
+nums[length-1]
+nums[length-2]
+nums[length-3]
;if(max1
/*第二層迴圈i,初始值指向k+1*/
for(
int i=k+
1;i2;i++
)/*定義指標j指向i+1*/
int j=i+1;
/*定義指標h指向陣列末尾*/
int h=length-1;
/*獲取當前最小值,如果最小值比目標值大,說明後面越來越大的值根本沒戲,忽略*/
int min=nums[k]
+nums[i]
+nums[j]
+nums[j+1]
;if(min>target)
/*獲取當前最大值,如果最大值比目標值小,說明當前num[k]這個數無論加上哪三個數都不會與目標值相等忽略*/
int max=nums[k]
+nums[i]
+nums[h]
+nums[h-1]
;if(max
/*開始j指標和h指標的表演,計算當前和,如果等於目標值,j++並去重,h--並去重,當當前和大於目標值時h--,當當前和小於目標值時j++*/
while
(jh--
;while
(j==nums[h+1]
)}else
if(curr>target)
else}}
}return result;
}}
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 和 ...