Leetcode-threesum
Leetcode 15. 3Sum 解題心得
題目: 15. 3Sum
題目描述
給定一組整數陣列 nums
,請找出所有不重複的三元組合,使得三元組合的總和為 0。
大概像這樣:
1 |
|
解題思路
可以用三個指針,然後分別去指向陣列中的每一個元素,然後再去找剩下的兩個元素,使得三個元素的總和為 0。
這邊要注意的是,因為題目要求不重複的三元組合,所以我們要先對陣列做排序,這樣才能避免重複的組合。
Code
1 |
|
- 先對陣列做排序,這樣才能避免重複的組合,同時也方便
7
與3
中的判斷。 - 這邊的
len(nums) - 2
是因為我們用了3個指標,所以最後兩個元素不用再去找了。 - 如果
nums[i] > 0
,則代表nums[i]
之後的元素都會大於 0,所以不可能有三元組合的總和為 0,所以可以直接break
。 - 如果
i > 0
且nums[i] == nums[i-1]
,則代表nums[i]
與nums[i-1]
重複,所以可以直接continue
,因為不計算重複的組合。 l
與r
分別指向nums[i]
之後的第一個元素與最後一個元素。- 當
l < r
時,代表還有元素可以去找。 - 如果
total < 0
,則代表nums[l]
需要更大一點,所以l += 1
,反之r -= 1
。 - 如果
nums[l]
與nums[r]
與triplet
中的元素重複,則代表這個組合已經找過了,所以可以直接l += 1
與r -= 1
,因為不計算重複的組合。
Leetcode-threesum
https://hibana2077.github.io/post/Leetcode-threesum.html