解題思路-leetcode第七十五題:顏色分類

PPlemon1997發表於2020-10-06

解題思路-leetcode第七十五題:顏色分類

給定一個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。
注意:
不能使用程式碼庫中的排序函式來解決這道題。
示例:
輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]
進階:
一個直觀的解決方案是使用計數排序的兩趟掃描演算法。
首先,迭代計算出0、1 和 2 元素的個數,然後按照0、1、2的排序,重寫當前陣列。
你能想出一個僅使用常數空間的一趟掃描演算法嗎?

解題思路:本題利用遍歷記錄每種顏色個數的方法解題,建立一個長度為3的列表,記錄每種顏色對應的個數,然後再一次遍歷陣列,按照0,1,2的個數重寫當前陣列。程式碼如下:
class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        t = [0 for i in range(3)]
        for s in nums:
            if s == 0:
                t[0] += 1
            if s == 1:
                t[1] += 1
            if s == 2:
                t[2] += 1
        for m in range(len(nums)):
            if m < t[0]:
                nums[m] = 0
            elif m < t[0]+t[1]:
                nums[m] = 1
            elif m < t[0]+t[1]+t[2]:
                nums[m] = 2
        return nums

提交後,通過。

相關文章