Sort Colors

public class Solution {
    public void sortColors(int[] A) {
        int left0, right0;
        int left1, right1;
        int left2, right2;
        
        int n = A[0];
        if(n == 0){
            left0 = right0 = 0;
            left1  = right1 = 1;
            left2 = right2 = 1;
        }
        else if(n == 1){
            left0 = right0 = 0;
            left1 = right1 = 0;
            left2 = right2 = 1;
        }
        else if(n == 2){
            left0 = right0 = 0;
            left1 = right1 = 0;
            left2 = right2 = 0;
        }
        int tmp;
        for(int i = 1; i < A.length; i++){
            switch(A[i]){
               case 0:{
                   tmp = A[i];
                   for(int j = i-1; j >= left1; j--){
                           A[j+1] = A[j];
                    }
                    A[left1] = tmp;
                    right0 = left1;
                    left1++;
                    right1++;
                    left2++;
                    right2++;
                   break;
               }
               case 1:{
                   tmp = A[i];
                    for(int j = i-1; j >= left2; j--){
                           A[j+1] = A[j];
                    }
                    A[left2] = tmp;
                    right1 = left2;
                    left2++;
                    right2++;
                   break;
               }
               case 2:{
                   right2++;
                   break;
               }
            }
        }
    }
}

网上别人更简单的代码:赞!!!

public void sortColors(int[] A) {


    int i=-1, j=-1, k=-1;

    for(int p = 0; p < A.length; p++)
    {
        if(A[p] == 0)
        {
            A[++k]=2;
            A[++j]=1;
            A[++i]=0;
        }
        else if (A[p] == 1)
        {
            A[++k]=2;
            A[++j]=1;

        }
        else if (A[p] == 2)
        {
            A[++k]=2;
        }
    }

}

and:

public void sortColors(int[] A) {

    int i=-1, j=-1;

    for(int p = 0; p < A.length; p++) {

       int v = A[p];
       A[p] = 2;

       if (v == 0) {

          A[++j] = 1;
          A[++i] = 0;
       }
       else if (v == 1) {

           A[++j] = 1;
       }
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值