给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。
示例:
输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
思路1:计数排序
class Solution {
public:
void sortColors(vector<int>& nums) {
int zero = -1;//[0,zero]为0
int two = nums.size();//[two,n-1]为2
for(int i = 0; i < two;)
if(nums[i]==1)
i++;
else if(nums[i]==2)
swap(nums[i],nums[--two]);
else{
++zero;
swap(nums[zero],nums[i++]);
}
}
};
python版本
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
count = [0,0,0]
for i in range(3):
count[i] = nums.count(i)
for i in range(count[0]):
nums[i] = 0
for i in range(count[0],count[0]+count[1]):
nums[i] = 1
for i in range(count[0]+count[1],len(nums)):
nums[i] = 2