力扣75.双指针颜色分类(Python)

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

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

必须在不使用库的sort函数的情况下解决这个问题。
解法:
方法一:双指针(两遍循环)
我们可以考虑对数组进行两次遍历。在第一次遍历中,我们将数组中所有的 0交换到数组的头部。在第二次遍历中,我们将数组中所有的 1交换到头部的 0之后。此时,所有的 2 22 都出现在数组的尾部,这样我们就完成了排序。

具体地,我们使用一个指针 j 表示「头部」的范围, j 中存储了一个整数,表示数组 nums 从位置 0 到位置 j-1 都属于「头部」。 j 的初始值为 0,表示还没有数处于「头部」。

在第一次遍历中,我们从左向右遍历整个数组,如果找到了 0,那么就需要将 0 与「头部」位置的元素进行交换,并将「头部」向后扩充一个位置。在遍历结束之后,所有的 0 都被交换到「头部」的范围,并且「头部」只包含 0。

在第二次遍历中,我们从「头部」开始,从左向右遍历整个数组,如果找到了 1,那么就需要将 1 与「头部」位置的元素进行交换,并将「头部」向后扩充一个位置。在遍历结束之后,所有的 1都被交换到「头部」的范围,并且都在 0之后,此时 2只出现在「头部」之外的位置,因此排序完成。

class Solution(object):
    def sortColors(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        j = 0
        for i in range(n):
            if nums[i]==0:
                nums[i],nums[j]=nums[j],nums[i]
                j += 1
        for i in range(j,n):
            if nums[i]==1:
                nums[i],nums[j]=nums[j],nums[i]
                j += 1 
        return nums

————————————————
版权声明:本文为CSDN博主「稚嫩的劢劢」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Mai_M/article/details/109822276

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值