LeetCode::移动零——初级算法
题目:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:
[0,1,0,3,12]输出:
[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
思路方法:
这道题我的思路比较直接,就是先找出输入数组中的非零元素。就是设置一个大小跟输入数组相等子新数组,然后把输入数组元素的值赋给新数组,接下来就把输入数组元素的值全部值为零,然后找出新数组中不为零的元素再赋值给输入数组,这时候的赋值需要保证是从输入数组的第一个位置开始。也就是再设置一个整型变量就可以了,初始值为0,被新数组赋值后才能加1。这个循环结束,输入数组即是本题答案。题目的要求也就是最后这能改变输入数组,才能AC。这个方法复杂度就很大了,比较low,后续想到简单的方法再加上。
代码如下:
class Solution {
public:
void result(vector<int>& nums) {
int n=nums.size();
vector<int> s(n);
int count=0;
for(int i=0;i<n;i++)
{
s[i]=nums[i];
}
for(int i=0;i<n;i++)
{
nums[i]=0;
}
for(int i=0;i<n;i++)
{
if(s[i]!=0)
{
nums[count]+=s[i];
count+=1;
}
}
}
};

浙公网安备 33010602011771号