[LeetCode]75 颜色分类

题目描述

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

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

示例:

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

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution:
def sortColors(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
m, n = 0, len(nums)-1
for i in range(len(nums)):
while m < len(nums) and nums[m] == 0:
m += 1
while n > 0 and nums[n] == 2:
n -= 1
if i > n or m == len(nums) or n == -1 or m == n:
break
if nums[i] == 0 and i >= m:
nums[i], nums[m] = nums[m], nums[i]
if nums[i] == 2 and i <= n:
nums[i], nums[n] = nums[n], nums[i]
while nums[i] == 0 and i >= m:
nums[i], nums[m] = nums[m], nums[i]
m += 1