中等数组双指针排序
PROBLEM / 研究生阶段
75. 颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库内置的 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.length1 <= n <= 300nums[i]为0、1或2
进阶:
- 你能想出一个仅使用常数空间的一趟扫描算法吗?
参考解法
下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。
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. 颜色分类