文章目录
- 1.题目
- 示例
- 提示
- 2.解答思路
- 3.实现代码
- 结果
- 4.总结
1.题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示
1 <= nums.length <= 104
-2^31 <= nums[i] <= 2 ^31 - 1
2.解答思路
用 i,j 遍历vector对象
其中nums[i]查找不等于0的值,交换到左侧nums[j],不断循环
nums[j]用于表示等于0的值。
参考文章:这个针对此题的动画图解非常清晰,强烈建议
3.实现代码
class Solution
{
public:
void moveZeroes(vector<int> &nums)
{
int n=nums.size();
if(n == 0)
return;
for(int i=0,j=0; i < n ;i++)
{
if(nums[i]!=0){//如果下标i的元素不等于0,交换到右侧
if(i>j)
swap(nums[i],nums[j]);
j+=1;
}
}
}
};
结果
4.总结
今天本来做了一个滑动窗口的题,感觉今天暂时没法弄清楚。
所以先做一道稍微简单一点的题打卡,继续学习~