LeetCode 75. Sort Colors (python一次遍歷,模擬三路快排)

LeetCode 75. Sort Colors (python一次遍歷,模擬三路快排)

題目分析:

  1. 本題須要實現數字只包含0,1,2的排序,而且要求一次遍歷。
  2. 因爲只用把數字隔離開,很容易想到快排的分割操做partition。
  3. 將三類數字隔離開,也就是模擬三路快排了。

解題思路

  1. 快排是選取哨兵p,將一段數組分紅<p,=p,>p三類,並按這個順序隔離開。
  2. 本題相似,哨兵爲1,將一段數組分紅0,1,2,即<1,=1,>1,並按這個順序隔離開。

代碼以下python

class Solution:    
    def sortColors(self, nums: List[int]) -> None:
        left = 0
        #mid表示目前第一個1的位置,在len(nums)表示1還未出現
        #加入1的操做,只用將mid-1,而後與left交換
        mid = len(nums)
        #right表示目前第一個2的位置,在len(nums)表示第一個2還未出現
        #加入2的操做,只用將right-1,而後與left交換
        right = len(nums)
        
        #left是一個遊標,不斷交換,直到nums[left]=0
        while left < mid:
            if nums[left] == 0:
                left += 1
            elif nums[left] == 1:
                mid -= 1
                temp = nums[left]
                nums[left] = nums[mid]
                nums[mid] = temp
            elif nums[left] == 2:
                right -= 1
                temp = nums[left]
                nums[left] = nums[right]
                nums[right] = temp
                # 處理出現了2,可是還未出現1的狀況
                if mid > right:
                    mid = right
相關文章
相關標籤/搜索