← 题库
中等数组双指针排序

PROBLEM / 研究生阶段

75. 颜色分类

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

我们使用整数 012 分别表示红色、白色和蓝色。

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

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

示例 2:

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

提示:

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

进阶:

  • 你能想出一个仅使用常数空间的一趟扫描算法吗?

参考解法

下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。

python

class Solution(object):
    def sortColors(self, nums):
        # 用三个指针记录区域尾部
        num0 = num1 = num2 = 0
        for i in range(len(nums)):
            if nums[i] == 0:
                nums[num2] = 2; num2 += 1
                nums[num1] = 1; num1 += 1
                nums[num0] = 0; num0 += 1
            elif nums[i] == 1:
                nums[num2] = 2; num2 += 1
                nums[num1] = 1; num1 += 1
            else:
                nums[num2] = 2; num2 += 1
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
这道题暂未附参考解法,编辑器草稿仍会自动保存在本机。
YOUR SOLUTION75. 颜色分类