leet18 四數之和

2021-10-01 12:20:36 字數 1516 閱讀 6777

/*對陣列進行從小到大排序*/

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; k < length -

3; k++

)/*獲取當前最小值,如果最小值比目標值大,說明後面越來越大的值根本沒戲*/

int min1 = nums[k]

+ nums[k +1]

+ nums[k +2]

+ nums[k +3]

;if(min1 > target)

/*獲取當前最大值,如果最大值比目標值小,說明後面越來越小的值根本沒戲,忽略*/

int max1 = nums[k]

+ nums[length -1]

+ nums[length -2]

+ nums[length -3]

;if(max1 < target)

/*第二層迴圈i,初始值指向k+1*/

for(

int i = k +

1; i < length -

2; 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)

/*獲取當前最大值,如果最大值比目標值小,說明後面越來越小的值根本沒戲,忽略*/

int max = nums[k]

+ nums[i]

+ nums[h]

+ nums[h -1]

;if(max < target)

/*開始j指標和h指標的表演,計算當前和,如果等於目標值,j++並去重,h--並去重,當當前和大於目標值時h--,當當前和小於目標值時j++*/

while

(j < h)

h--;while

(j < h && i < h && nums[h]

== 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 和 ...