3Sum

題目
思路:

  • 用三個指標,iterate 最左邊那個,找出對應於每個 left 指標的所有 result
  • 先把 nums 排序,如此移動 mid, right 指標時就有個依據

Python3 solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def threeSum(self, nums):
result = []
nums.sort()
for left in range(len(nums) - 2): # 右邊須留兩個空位給另兩個指標
if left > 0 and nums[left] == nums[left - 1]: # 排除重複的 result,left 必須 > 0 才會有前一個
continue # - 假如 nums[left] 是一樣的,最後找到的 result 也會是一樣的,所以要排除掉
mid = left + 1
right = len(nums) - 1
while mid < right: # 設定有效範圍,在此範圍內尋找符合的 mid, right
t_sum = nums[left] + nums[mid] + nums[right]
if t_sum < 0:
mid += 1 # 此時必須讓 t_sum 變大,所以將 mid 往右移
elif t_sum > 0:
right -= 1 # 此時必須讓 t_sum 變小,所以將 right 往左移
else:
result.append([nums[left], nums[mid], nums[right]])
while mid < right and nums[mid] == nums[mid + 1]: # 跳過 mid 重複的部分
mid += 1
while mid < right and nums[right] == nums[right - 1]: # 跳過 right 重複的部分
right -= 1

# 正常的移動 mid, right,尋找下一個符合的 result
mid += 1
right -= 1

return result

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×