这个题目,可以用到双指针的方法。
采用2个指针i、k,i用于遍历数组,找到不为0的数组与k指向的位置的值进行交换。
以上面的示例1为例(0,1,0,3,12):
1. i、k都指向0,i不是非零,i指向下一个位置
2. i指向1、k指向0,i非零。i和k指向的位置交换数值,然后i和k都指向下一个位置---1,0,0,3,12
3. i指向第三个位置的0,k指向第二个位置的0,i不是非零,i继续指向下一个位置
4. i指向3、k指向0,i非零。i和k指向的位置交换数值,然后i和k都指向下一个位置---1,3,0,0,12
5. 此时i指向12,k指向第三个位置的0,i非零。i和k指向的位置交换数值,然后i和k都指向下一个位置---1,3,12,0,0
代码如下:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int i,k=0;//双指针i和k
int len=nums.size();
for(i=0;i<len;i++){
if(nums[i]!=0){
int t=nums[i];
nums[i]=nums[k];
nums[k]=t;
k++;
}
}
}
};