leetcode: Sort Colors

本文介绍了一种在遍历一遍数组的情况下实现0、1、2三种元素的排序算法。通过使用两个指针分别记录0和2的数量,并在遍历过程中实时调整它们的位置,实现了高效的排序效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求在遍历一遍的情况下完成排序。  由于只有三种元素,我们完全可以在遍历的同时维护两个指针分别代表0和2的个数,将遍历到的每个0放在数组前面,2放在数组后面并更新0或2的个数即可,这样在保证遍历到了每个元素的时候就可以实现要求的排序。  试想,当扫描到0时,需要将其与之前的元素交换,交换得到的元素肯定被遍历过;扫描到1时,继续,则该元素也被遍历过;扫描到2时要和之后的元素交换,交换的道德元素没被遍历过,应继续扫描这个元素直到其为0或1或是扫描完全部元素为止。


public class Solution {
    public void sortColors(int[] A) {
        int l = A.length;
        if( l == 0 )
        {
            return ;
        }
        int st = 0,ed=l-1,i=0;
        while(i<=ed)
        {
            if(A[i]==0)
            {
                A[i] = A[st];
                A[st] = 0;
                ++st;
                ++i;
            }
            else if( A[i]==1)
            {
                ++i;
            }
            else
            {
                A[i] = A[ed];
                A[ed] = 2;
                ed--;
            }
        }
        return ;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值