Leetcode-75. Sort Colors(三向切分)
阿新 • • 發佈:2018-11-25
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的個數,然後第二次遍歷修改數字。