将数组中所有的0挪到数组的末尾
朋友购买《C Primer Plus》第六版进入邮电出版社的异步社区微信群,群里给出的题目。此题的C程序我会写,但从给出答案来看,感觉要用C++来写,故来论坛求助,请按给出的答案格式用C++编写程序,谢谢!【每日一练 第17天】
给定一个数组nums,写一个函数,将数组中所有的0挪到数组的末尾,而维持其他所有非0元素的相对位置。
举例: nums = [9,0,0,0,10,0,0,0,11,0,12,0,13,0,14,0,15,0,16,0],函数运行后结果为[9,10,11,12,13,14,15,16,0,0,0,0,0,0,0,0,0,0,0,0]
第17天答案:
思路:创建一个临时数组nonZeroElements,遍历nums,将nums中非0元素赋值到nonZeroElements中,而后按顺序将nonZeroElements赋值到nums上,未遍历的元素置0;
代码如下:
1// 时间复杂度: O(n)
2// 空间复杂度: O(n)
3class Solution {
4public:
5 void moveZeroes(vector<int>& nums) {
6
7 vector<int>
nonZeroElements;
8
9 // 将vec中所有非0元素放入nonZeroElements中
10 for(int i = 0 ; i < nums.size() ; i ++)
11 if(nums[ i ])
12
nonZeroElements.push_back(nums[ i] );
13
14 // 将nonZeroElements中的所有元素依次放入到nums开始的位置
15 for(int i = 0 ; i < nonZeroElements.size() ; i ++)
16 nums[ i ] = nonZeroElements[ i ];
17
18 // 将nums剩余的位置放置为0
19 for(int i = nonZeroElements.size() ; i < nums.size() ; i ++)
20 nums[ i ] = 0;
21 }
22};