题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数
解题思路:
- 若题目没有要求不能新建数组,我们可以采用暴力解。新建一个和原数组相同长度的数组,遍历原数组,将所有非0元素放入新建的数组中,剩余的位置补0.
- 按照题目要求在原数组上进行操作。设置两指针i和j,i用于查找数组中的非0元素,j用于指向数组中第一个0元素。
#include<iostream> #include<vector> using namespace std; class Solution{ public: void moveZeroes(vector<int>& nums){ int temp = 0; for(int i=0, j=0;i<nums.size();++i){ if(nums[i] != 0){ temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; j++; } } } }; int main(){ Solution solution; vector<int> vec; int i=0; do{ cin>>i; vec.push_back(i); }while(getchar() != '\n'); solution.moveZeroes(vec); for(int i=0;i<vec.size();++i){ cout<<vec[i]<<" "; } cout<<endl; return 0; }