leetcode 第75题 颜色分类 python解法

该博客介绍了LeetCode第75题的颜色分类问题的Python解法。通过双指针first和last,遍历数组,将0移至前部,2移至后部,从而实现排序。在遍历过程中,遇到0时不操作,遇到2时根据last的值判断是否交换,遇到1则继续遍历,最终实现题目要求的一趟扫描排序。
摘要由CSDN通过智能技术生成

leetcode 第75题 颜色分类 python解法

问题分析

先看题目
在这里插入图片描述
其实题目的要求很简单,就是将一个仅包含0,1,2的数组进行排序,但是更高的要求时只是用常数空间,以及仅用一趟扫描。
所以这两个要求就禁止了大多数的排序算法。好在这个数组只有三个数字0,1,2,也就是说排序后,数组的前面肯定都是0,后面都是2,中间都是1,这一点时可以确定的。那么就有这样一种思路,就是遍历数组,如果是0,就移到前面,如果是2就移到后面,剩下中间的就是1了。
所以我的方法 就是使用双指针first和last。first指针就是将要替换成0的位置,last指针就是要替换成2的位置。接下来遍历数组,如果是0,先看当前位置是否大于first,如果相等,说明此位置之前都是0,因此不要操作,first加1后接着遍历;如果当前位置大于first,则要进行交换。将0换到first指向的位置,当前位置的值因此也变化了,成为1(只可能是1,因为此位置之前的2全部都已经处理了),first加1接着遍历。
如果遍历到了2,当前位置与last比较,如果last指向的也是2,那么last减去1,不然又将会把2换到前面,本程序会导致死循环。如果last不等于2,那么交换两个值&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值