此题要求三种颜色排序,相邻的排在一块。直接计数排序变形就OK。
这里只用统计前两种颜色的数量,后一种颜色通过长度-前面的总和就可以算出。
public void sortColors(int[] A) {
int numWhite = 0;
int numRed = 0;
for (int i = 0; i < A.length; i++) {
if (A[i] == 0)
numRed++;
if (A[i] == 1)
numWhite++;
}
for (int i = 0; i < numRed; i++)
A[i] = 0;
for (int i = numRed; i < numRed + numWhite; i++)
A[i] = 1;
for (int i = numRed + numWhite; i < A.length; i++)
A[i] = 2;
}