Leetcode-75. Sort Colors(三向切分)

https://leetcode.com/problems/sort-colors/

题意:一次遍历数组完成排序将0,1,2安排妥当

这道题是可以用三向切分排序的思想解决,算法思路参考https://mp.csdn.net/postedit/83472800

设置两个数组下标start和end和一个遍历指针i:[0,start)存储0,[1,i)存储1,[i,end]中的数等待遍历,(end,nums.length-1]存储2,0,1,2是不是都被安排的明明白白!

class Solution {
    public void sortColors(int[] nums) {
        int start=0,end=nums.length-1;
        int i=start;
        while(i<=end)
        {
            if(nums[i]==2)
            {
                nums[i]=nums[end];
                nums[end]=2;
                end--;
                i--;
                //用2与nums[end]交换,nums[end]可能是0,所以需要再次判断!
            }
            else if(nums[i]==0)
            {
                nums[i]=nums[start];
                nums[start]=0;
                start++;
            }
            i++;
        }
    }
}

思路二(两次遍历):

第一次遍历计算0,1,2的个数,然后第二次遍历修改数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值