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的个数,然后第二次遍历修改数字。

猜你喜欢

转载自blog.csdn.net/To_be_to_thought/article/details/83898478