每日刷題 三數之和

2021-09-26 23:36:45 字數 1343 閱讀 8947

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

示例:

給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[ [-1, 0, 1], [-1, -1, 2]]

方法一:列舉。將所有可能的對數都列舉出來,檢查是否滿足 a + b + c = 0 的條件,但該方法的執行時間為 o(n^3), 直覺告訴我們,這並不高效。

方法二:排序後二分查詢。首先排序預處理,然後巢狀兩個迴圈 i , j, 對於每乙個元素 nums[i], nums[j],使用二分查詢是否存在滿足 -1 * ( nums[i] + nums[j) 的元素。這種方法的執行時間為 o(n^2 logn).

**:

class

solution);

}}//將集合中元素複製到陣列中來

vector< vector<

int>> result;

for(

auto it = res.

begin()

; it != res.

end(

); it++

) result.

push_back

(*it)

;return result;}}

;

方法三:排序後雙指標。排序預處理後,遍歷陣列,對於每乙個元素 nums[k], 設定兩個指標 i, j, 其中 i = k + 1, j = nums.size() - 1, i, j 指標向中間移動。

當 i < j 時,迴圈計算 temp = nums[i] + nums[j] + nums[k]. 若 temp < 0, i+=1; 若 temp > 0, 則 j -= 1; 若 temp == 0, 則記錄三元組。

時間複雜度為 o(n^2).

**:

class

solution

else

if( temp >0)

else

if( temp ==0)

);i++

, j--

;while

( i < j && nums[i]

== nums[i-1]

&& nums[j]

== nums[j+1]

) i++

, j--;}

}}return res;}}

;

每日刷題 兩數之和

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

每日刷題 四數之和

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

每日刷題 15 三數之和(雙指標)

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