題目:
給定一個包含 n 個整數的數組 nums
,判斷 nums
中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定數組 nums = [-1, 0, 1, 2, -1, -4], 滿足要求的三元組集合爲: [ [-1, 0, 1], [-1, -1, 2] ]
題目分析:
O(n^3)的代碼會超時,考慮用雙指針將問題變成O(n^2).:
1.固定i,j、k爲雙向指針,j從頭開始,k從尾開始遍歷。
2.當和小於0時,j加1,當和大於0時,k減1
3.當找到一個值時,不能當做此時i的固定結果,因爲可能有多個,所以需要再把j、k其中之一改變,j加1或者k減1都可以
python代碼:
class Solution(object):
def threeSum(self, nums):
length = len(nums)
resultList = []
nums.sort()
for i in range(0,length-2):
j = i + 1
k = length - 1
while (j < k):
sum0 = nums[i] + nums[j] + nums[k]
if (sum0 == 0):
result = []
result.append(nums[i])
result.append(nums[j])
result.append(nums[k])
if result not in resultList:
resultList.append(result)
j +=1
if (sum0 < 0):
j +=1
if (sum0 > 0):
k -=1
return resultList