给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。
链接:https://leetcode-cn.com/problems/sort-colors
/*基本思想:先用统计每个数的出现次数,然后重写数组
*/
class Solution {
public:
void sortColors(vector<int>& nums) {
map<int,int> m;
map<int, int>::iterator iter;
int i;
for(i=0;i<nums.size();i++)
{
iter = m.find(nums[i]);
if(iter!=m.end())
m[nums[i]]++;
else
m[nums[i]] = 1;
}
iter = m.begin();
nums.clear();
while(iter != m.end())
{
cout<<iter->second<<iter->first<<endl;
while(iter->second>0)
{
nums.push_back(iter->first);
iter->second--;
}
iter++;
}
}
};