leetcode刷題(22) 15 三數之和

2021-09-29 09:22:59 字數 1270 閱讀 8401

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

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

例如, 給定陣列 nums =[-

1,0,

1,2,

-1,-

4],滿足要求的三元組集合為:[[

-1,0

,1],

[-1,

-1,2

]]

class solution 

arrays.

sort

(nums)

;for

(int i=

0;i(i>

0&&nums[i]

==nums[i-1]

)int left = i+1;

int right = len-1;

while

(leftwhile

(left==nums[right-1]

) left++

; right--;}

else

if(sum<0)

else

if(sum>0)

}}return list;

}}

這個解法中,需要注意幾個要點;

1.對陣列進行排序 arrays.sort(nums);

2.邊界值判斷,當nums為null或者長度小於3的判斷

if (nums == null || nums.length < 3)
3.nums[i]>0時需要跳出迴圈

if(nums[i] > 0) break;
4.left和right的初始條件定義

int l = i + 1;

int r = len - 1;

5.因為不允許出現重複組合,所以去重,無論是 i還是 left和right都要去重

if(i > 0 && nums[i] == nums[i-1]) continue; // 去重
while (l < r && nums[l] == nums[l + 1]) l++;

while (l < r && nums[r] == nums[r - 1]) r--;

leetcode刷題紀實(三)

反轉乙個單鏈表。class solution return cur 比較常見的思路,利用雙指標,乙個在前,乙個在後,進行就地翻轉 如果說便於理解的話,其實還可以寫出一種三指標的就地翻轉格式,就不寫了 第二個方法 頭插法 class solution head q return head 第三種,遞迴...

LeetCode刷題 動態規劃(三)

最長公共子串行問題,最基本的問題是在兩個字串中找出最長公共字串。方法是使用雙指標 i,j遍歷兩個字串,建立二維 dp 陣列,通過填表獲得結果。1143,最長公共子串行,medium 583,兩個字串的刪除操作,medium 712,兩個字串的最小ascii刪除和,medium 1143,最長公共子串...

leetcode刷題筆記334題 遞增的三元子串行

leetcode刷題筆記334題 遞增的三元子串行 問題描述 給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子串行。數學表示式如下 如果存在這樣的 i,j,k,且滿足 0 i j k n 1,使得 arr i arr j arr k 返回 true 否則返回 false 說明 要求演...