75. 颜色分类

题目描述

 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

原题请参考链接https://leetcode-cn.com/problems/sort-colors/

题解

方法一 【单指针】

class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        f = 0
        l = len(nums)
        for i in range(l):
            if nums[i] == 0:
                nums[f],nums[i] = nums[i],nums[f]
                f += 1
        for i in range(f,l):
            if nums[i] == 1:
                nums[f],nums[i] = nums[i],nums[f]
                f += 1
        

方法二 【双指针】

class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        l = len(nums)
        low = 0
        fast = 0
        for i in range(l):
            if nums[i] == 1:
                nums[fast],nums[i] = nums[i],nums[fast]
                fast += 1
            elif nums[i] == 0:
                nums[low],nums[i] = nums[i],nums[low]
                if low < fast:
                    nums[fast],nums[i] = nums[i],nums[fast]
                low += 1
                fast += 1
posted @ 2021-02-18 00:56  Bladers  阅读(19)  评论(0)    收藏  举报