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]
法一、统计
- 统计数组几个0,1,2然后重写数组
class Solution:
def sortColors(self, nums: List[int]) -> None:
#统计数组几个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
#升级一下
count1,count2,count3=nums.count(0),nums.count(1),nums.count(2)
for i in range(len(nums)):
if i < count1:
nums[i] = 0
elif i >= count1 and i < len(nums) - count3:
nums[i] = 1
else:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人