题目地址:
https://leetcode.com/problems/sort-colors/
给定一个只含 0 , 1 , 2 0,1,2 0,1,2的数组 A A A,将其排序。
维护三个指针, i i i左边存 0 0 0, k k k右边存 2 2 2, A [ i , j ) A[i,j) A[i,j)存 1 1 1。维护它们的定义即可。代码如下:
class Solution {
public:
void sortColors(vector<int>& A) {
for (int i = 0, j = 0, k = (int)A.size() - 1; j <= k;) {
if (!A[j]) swap(A[i++], A[j++]);
else if (A[j] == 2) swap(A[k--], A[j]);
else j++;
}
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。