283. 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
 必须在原数组上操作,不能拷贝额外的数组。
 尽量减少操作次数。
思路:
暴力法:直接运用vector容器的swap函数,从后往前,发现一个0就再来一个循环一直交换到最后
 1 void moveZeroes(vector<int>& nums) 
 2     {
 3         int len = nums.size();
 4     
3 for(int i = nums.size()-1; i >= 0; i--) 6 { 7 if(nums[i] == 0) 8 { 9 for(int j = i; j < nums.size()-1; j++) 10 { 11 swap(nums[j], nums[j+1]); 12 } 13 } 14 } 15 }

双指针: 指针j 始终指向第一个不为0的数组元素, 指针i 一直往前索引,然后交换,一次遍历即可,很快。

 1 void moveZeroes(vector<int>& nums) 
 2 {
 3     int i,j;
 4     for(i=0,j=0;i<nums.size();i++)
 5     {
 6         if(nums[i]!=0)
 7         {
 8             swap(nums[i],nums[j]);
 9             j++;
10         }
11     }
12 }
 
原文地址:https://www.cnblogs.com/ZhengLijie/p/12858637.html