【LeetCode】Sort Colors 陣列排序

HIT_微笑前進發表於2015-03-20

題目:Sort color


<span style="font-size:18px;">/*LeetCode sort colors
題目:輸入一個陣列,包含0,1,2分別代表紅白藍三種顏色,要求按照0,1,2的順序,將同類顏色的連續排列
思路:計數排序,是一個遍歷兩遍的方法:可以先統計每種的數量,之後直接將這一範圍內的所有值都賦值為相應的數字即可
遍歷一遍的話可以在遍歷的同時分別與0和2比較,從頭和尾一起交換,1的在中間不用做處理;
*
*/
package javaTrain;

public class Train13 {
	public void sortColors(int[] A) {
		int n = A.length;
		int red = 0,blue = n-1;
		
		for(int i=0;i < blue+1;){	//因為會從後向前推進所以以blue表示尾部,確保只用遍歷一遍
			int temp = A[i];	
			if(temp == 0){ 
				A[i++] = A[red];	//因為red在前,所以交換時它指向的只能是0或1,所以交換後的位置可以向前移
				A[red++] = temp;
			}
			else if(temp == 2){ 
				A[i] = A[blue];		//而blue在後,它指向的之前並沒有被比較過有可能有0,1,2所以交換的點不能向前移
				A[blue--] = temp;
			} 
		}
    }
}
</span>


相關文章