思路整理:
Input:[0,1,0,3,12]
Output:[1,3,12,0,0]
怎么想到的:直接删除最好。
1.遇到0直接删除,统计遇到0的个数,扫到最后。
2.对处理过后的进行添加0,
vector,
/*
思路:扫到当前的元素,要么是0要么不是,是则删除。最后再添加回来就行了
*/
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int zero_count=0;
int len=nums.size();
if(len<=1) return;
for(int i=0;i<len-1;i++)
{
if(nums[i]==0)
{
nums.erase(nums.begin()+i);
len--;//删除后改变当前数组长度
i--;//判断当前下标元素
zero_count++;
}
}
for(int i=0;i<zero_count;i++)
{
nums.push_back(0);
}
}
};
还有更快的方法吗?
比大家慢了太多了。
为啥更慢了:
并没什么提升,
/*
思路:扫到当前的元素,要么是0要么不是,是则删除。最后再添加回来就行了
*/
class Solution {
public:
void moveZeroes(vector<int>& nums) {
//int zero_count=0;
int len_orig=nums.size();
if(len_orig<=1) return;
for(int i=0;i<len_orig-1;i++)
{
if(nums[i]==0)
{
nums.erase(nums.begin()+i);
len_orig--;//删除后改变当前数组长度
i--;//判断当前下标元素
// zero_count++;
nums.push_back(0);
}
}
// for(int i=0;i<zero_count;i++)
// {
// nums.push_back(0);
// }
}
};
算了,看大神的操作吧。
。。。