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
posted @   Frommoon  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示