給定乙個包含 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 說明 要求演...