演算法題 四數之和

2021-10-07 20:07:03 字數 2131 閱讀 1487

題目描述:

給定乙個包含 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]

]

解答1

類似於三數之和的問題,先對陣列排序,在固定前兩個數nums[i]和nums[j]的情況下,使用兩個指標,來尋找另外兩個數。

同時,在固定nums[i]時,通過當前可得到的最大值和最小值來和目標值進行比較,如果最小值都比目標值大,說明對所有的nums[i]都不可能會有滿足條件的,直接結束i的迴圈;如果最大值比目標值小,說明對當前nums[i]不可能滿足條件了,進入下乙個迴圈。

同理,固定nums[j]時也是同樣的處理。

接下來的處理,和三數之和相同。

class

solution

arrays.

sort

(nums)

;for

(int i=

0;i3;i++

)/*獲取當前最大值,如果最大值比目標值小,說明後面越來越小的值不需要考慮,進入下乙個迴圈*/

int max=nums[i]

+nums[len-1]

+nums[len-2]

+nums[len-3]

;if(max//第二個迴圈,固定第二個數

for(

int j=i+

1;j2;j++

)//兩個指標

int left = j+1;

int right = len-1;

/*獲取當前最小值,如果最小值比目標值大,說明後面越來越大的值不許考慮,直接結束迴圈*/

min=nums[i]

+nums[j]

+nums[j+1]

+nums[j+2]

;if(min>target)

/*獲取當前最大值,如果最大值比目標值小,說明後面越來越小不需考慮,跳出此次迴圈*/

max=nums[i]

+nums[j]

+nums[len-2]

+nums[len-1]

;if(max//使用兩個指標,left和right,left從j+1開始,right從len-1開始

//當left//nums[i],nums[j],nums[left]和nums[right]的和為sum

//如果sum>target,就將right前移,right--

//如果sum//sum等於target,先把這一組結果記錄下來

//將left++,right--

//在left//在leftwhile

(leftwhile

(left== nums[right+1]

)}else

if(sumelse right--;}

}}return ans;

}}

解答二

通過遞迴實現ksum。

將問題分解為: k等於2時,求兩數之和;k>2時,求k-1個數之和。

class

solution

private list

>

ksum

(int

nums,

int target,

int k,

int index)

//遞迴的出口,就是求兩數之和

//雙指標求兩數之和

if(k ==2)

while

(left== nums[right+1]

)}else

if(nums[left]

+nums[right]

>target)

else left++;}

}else}}

}return res;

}}

LeetCode演算法題 四數之和fourSum

給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 ...

演算法 兩數之和,三數之和,四數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

演算法題 三數之和

題目描述 給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 解法一...