我正在解决LeetCode.com上的一个问题:
给定一个有n个红、白或蓝色物体的数组,将它们就地排序,使相同颜色的物体相邻,并按照红、白和蓝色的顺序排列。在这里,它们使用整数0、1和2来表示红、白和蓝色。[不能使用平凡的计数排序]。
对于输入:[2,0,2,1,1,0];期望输出为:[0,0,1,1,2,2]。
其中之一高度赞成的解决方案如下:
我的问题是,为什么当
谢谢!
给定一个有n个红、白或蓝色物体的数组,将它们就地排序,使相同颜色的物体相邻,并按照红、白和蓝色的顺序排列。在这里,它们使用整数0、1和2来表示红、白和蓝色。[不能使用平凡的计数排序]。
对于输入:[2,0,2,1,1,0];期望输出为:[0,0,1,1,2,2]。
其中之一高度赞成的解决方案如下:
public void sortColors(vector<int>& A) {
if(A.empty() || A.size()<2) return;
int low = 0;
int high = A.size()-1;
for(int i = low; i<=high;) {
if(A[i]==0) {
// swap A[i] and A[low] and i,low both ++
int temp = A[i];
A[i] = A[low];
A[low]=temp;
i++;low++;
}else if(A[i]==2) {
//swap A[i] and A[high] and high--;
int temp = A[i];
A[i] = A[high];
A[high]=temp;
high--;
}else {
i++;
}
}
}
我的问题是,为什么当
A[i]==0
和A[i]==1
时i
被递增,而A[i]==2
时不递增?使用纸笔算法可以得出答案,但你能否提供一些直觉上的解释呢?谢谢!