1. 程式人生 > >Leetcode-75. Sort Colors(三向切分)

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的個數,然後第二次遍歷修改數字。