LeetCode 75. 颜色分类

75. 颜色分类

Difficulty: 中等

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

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

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]

示例 3:

输入:nums = [0]
输出:[0]

示例 4:

输入:nums = [1]
输出:[1]

提示:

  • n == nums.length
  • 1 <= n <= 300
  • nums[i]012

进阶:

  • 你可以不使用代码库中的排序函数来解决这道题吗?
  • 你能想出一个仅使用常数空间的一趟扫描算法吗?

Solution

实际上是考察排序。
题目得要多写,昨天提交的今天再写又提交错误了。

class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        left, right = 0, len(nums)-1
        self.qSort(nums, left, right)

    def qSort(self, arr, low, high):
        if len(arr) <= 1:
            return arr
        if low < high:
            p = self.partition(arr, low, high)

            self.qSort(arr, low, p-1)
            self.qSort(arr, p+1, high)

    def partition(self, arr, low, high):
        i = low - 1
        pivot = arr[high]
        for j in range(low, high):
            if arr[j] <= pivot:
                i += 1
                arr[i], arr[j] = arr[j], arr[i]
        arr[i+1], arr[high] = arr[high], arr[i+1]
        return i+1
原文地址:https://www.cnblogs.com/swordspoet/p/14510151.html