解题思路
和荷兰国旗三色排列类似
设置变量head、tail、i(用于遍历数组)
1、若为0,则与A[head]交换,head++、i++
2、若为1,则跳过,0、2首尾确定了,1自然放在中间。
3、若为2,则与A[tail]交换,tail–,此时不能i++,因为数组后半部分还没访问到,交换过来的有可能为0也有可能为2也有可能为1,需要继续判断。
代码
#include<algorithm>
class Solution {
public:
void sortColors(int A[], int n) {
int head = 0,tail = n - 1,i = 0;
while(i <= tail){
if(A[i] == 1)
i++;
else if(A[i] == 0){
swap(A[i],A[head]);
head++;
i++;
}
else{
swap(A[i],A[tail]);
tail--;
}
}
}
};