給定一個數值 array nums
,
裡面只有 red, white, blue 三種顏色,需要將陣列排序後,呈現 red -> white -> blue 的順序。
上述三個顏色以數字 0, 1, 2 代表
解這個題目不可以依賴原生的 sort 方法
一般的排序演算法最低的 TC 也要 O(NlogN) ,但是這個題目告訴我們只有 0,1,2 這三個數字,因此可以有其他更快的解法來完成,可以達到 TC O(N)
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
current, left, right = 0, 0, len(nums)-1
while current <= right:
if nums[current] == 0:
nums[current], nums[left] = nums[left], nums[current]
left += 1
current += 1
elif nums[current] == 2:
nums[current], nums[right] = nums[right], nums[current]
right -= 1
else:
current += 1
因為 在當下的 iteration 中,right 指針位置指的是未來的 2 要放的位置,他當前是什麼值並不會知道,還是必須由 current 遍歷到後才能判斷