給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
我一拿到這題,就想著暴力破解,三重迴圈,i答案思路:雙指標法,用雙重迴圈,其中一層迴圈雙指標,乙個迴圈兩個變數,時間複雜度就減少了。
第一層固定元素k,第二層迴圈指標 i,j
k收穫:
1.本題學到了雙指標法,乙個指向頭,乙個指向尾,a情況頭指標++,b情況尾指標--,c情況 頭指標++ 尾指標--;
2.學會了遍歷list時候 去重的程式寫法,看起來很舒服。
i += 1
while i < j and nums[i] == nums[i-1]: i += 1
注: 是 i == i-1 不是 i == i+1 : 因為是判斷現在與過去,不是現在與將來。
class solution:
def threesum(self, nums: list[int]) -> list[list[int]]:
if len(nums)
return none
nums.sort()
res =
k = 0
while k
if nums[k] > 0 :
break
i,j = k+1,len(nums) - 1
while i
curval = nums[k] + nums[i] + nums[j]
if curval == 0:
i = i + 1
j -= 1
while iwhile ielif curval
i += 1
while ielif curval > 0:
j -= 1
while i k+=1
while kreturn res
LeetCode 15 三數之和
15.給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組 方法一,個人解法正確,但是效率太低,時間複雜度o n 3 時間超時,無法提交至leetcode public s...
leetcode 15 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class solutio...
leetcode15 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 先找兩數之和,然後再用un...