Sort Colors

这道题目有一个我觉得非常好的解法,即用三个变量i, j, k分别统计0出现次数,0,1出现次数,0,1,2出现次数,这样即可对A[]进行赋值。赋值顺序有讲究,即先赋2,再赋1,最后赋0,这样能够保证A[]对应位置填入正确的值。我觉得这种解法好的地方在于通用性强,因为对于有多于3个的数的这种排序,都能用类似办法很方便地进行解决,假如用普通的双指针来做,那将是特别麻烦的事情。下面贴上AC代码:

class Solution {
public:
    void sortColors(int A[], int n) {
        if (A == NULL || n <= 1)
            return;
            
        int i = -1, j = -1, k = -1;
        
        for (int idx = 0; idx < n; idx++)
        {
            if (A[idx] == 0)
            {
                A[++k] = 2;
                A[++j] = 1;
                A[++i] = 0;
            }
            else if (A[idx] == 1)
            {
                A[++k] = 2;
                A[++j] = 1;
            }
            else
            {
                A[++k] = 2;
            }
        }
        
    }
};


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值