目录
题目
- 给定一个包含红色、白色和蓝色、共 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]
法一、统计
- 统计数组几个0,1,2然后重写数组
count1,count2,count3=nums.count(0),nums.count(1),nums.count(2)
for i in range(0,count1):
nums[i]=0
for i in range(count1,len(nums)-count3):
nums[i]=1
for i in range(len(nums)-count3,len(nums)):
nums[i]=2
return nums
法二、冒泡排序
for i in range (len(nums)):
for j in range(i,len(nums)):
if nums[i]>nums[j]:
nums[i],nums[j]=nums[j],nums[i]
return nums
法三、三指针
i,c,j=0,0,len(nums)-1#i指向数组头,c表示当前元素,j指向数组尾
while c<=j:#当数组没结束时进行
if nums[c]==2:#如果当前元素是2,则与数组尾换,并j往前移一位
nums[c],nums[j]=nums[j],nums[c]
j-=1
if nums[c]==0:#如果当前元素是0,则与数组头换,并i往后移一位,c也往后移一位
nums[c],nums[i]=nums[i],nums[c]
i+=1
c+=1
if nums[c]==1:#如果当前元素是1,只把c往后移一位
c+=1
return nums
标签:颜色,nums,分类,range,len,75,数组,count1,count3
From: https://www.cnblogs.com/lushuang55/p/17997065