題目:
Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.
Notice that the solution set must not contain duplicate triplets.
給定一個整數數組 nums,傳回所有[nums[i], nums[j], nums[k]]滿足i != j、i != k、 和j != k、 和 的三元組nums[i] + nums[j] + nums[k] == 0。
請注意,解決方案集不能包含重複的三元組。
解題思路
排序 (Sorting)
先對陣列排序,這樣方便去重、也方便用雙指針。
固定一個數 + 雙指針
外層迴圈:固定一個數 nums[i]。
內層:用雙指針 left = i+1, right = n-1,找是否存在 nums[left] + nums[right] = -nums[i]。
去重 (Deduplication)
外層:如果 nums[i] == nums[i-1],就跳過,避免重複答案。
內層:移動 left、right 時,也要跳過相同的數字。
時間複雜度
O(n²),比暴力 O(n³) 快很多。