使用库函数(测试)
class Solution {
public:
void sortColors(vector<int>& nums) {
sort(nums.begin(),nums.end());
}
};
统计个数,再赋值:
class Solution {
public:
void sortColors(vector<int>& nums) {
int count0=0,count1=0,count2=0;
for(int i=0;i<nums.size();i++){
if(nums[i]==0)count0++;
else if(nums[i]==1) count1++;
else count2++;
}
for(int i=0;i<nums.size();i++){
if(i<count0) nums[i]=0;
else if(i>=count0&&i<count1+count0) nums[i]=1;
else nums[i]=2;
}
}
};
上面方法的改进:
class Solution {
public:
void sortColors(vector<int>& nums) {
//start表示0的开始位置,count1表示1的个数,count2表示2的个数
int start=0,count1=0,count2=0;
for(int i=0;i<nums.size();i++){
if(nums[i]==0){ //因为0在最前面,所有可以先将0的值写入
nums[start]=0;
start++;
}
else if(nums[i]==1) count1++;
else count2++;
}
for(int i=start;i<nums.size();i++){
if(i<count1+start) nums[i]=1;
else nums[i]=2;
}
}
};
834. 树中距离之和
树中距离之和这个题太难了吧。。。自己写的思路没错到时超时。。。官方答案动态规划又不好理解。。。写那么长。。。