第一种解法,统计red,white,blue的个数,然后再扫一遍进行置数,two pass
/**
* @author johnsondu
* @time 11:26 14th Oct 2015
* @status Accepted
* @strategy two pass
* @problem Set Matrix Zeroes
* @url https://leetcode.com/problems/set-matrix-zeroes/
*/
class Solution {
public:
void sortColors(vector<int>& nums) {
int color[3] = {0};
for(int i = 0; i < nums.size(); i ++)
color[nums[i]] ++;
int cnt = 0;
for(int i = 0; i < 3; i ++){
int idx = 0;
while(idx < color[i]) {
nums[cnt++] = i;
idx ++;
}
}
}
};
第一种解法,利用两个指针,一个指向首个头,
表示red的下标,一个指向数组尾,表示blue的下标。 One pass
</pre></p><pre name="code" class="cpp">/**
* @author johnsondu
* @time 11:26 14th Oct 2015
* @status Accepted
* @strategy one pass
* @problem Set Matrix Zeroes
* @url https://leetcode.com/problems/set-matrix-zeroes/
*/
class Solution {
public:
void sortColors(vector<int>& nums) {
int ridx = 0;
int bidx = nums.size() - 1;
int i = 0;
while(i < bidx + 1)
{
if(nums[i] == 0) {
swap(nums[i], nums[ridx]);
ridx ++;
i ++;
continue;
}
if(nums[i] == 2) {
swap(nums[i], nums[bidx]);
bidx --;
continue;
}
i ++;
}
}
};