Leetcode 移动零

本文最后更新于:2020年7月4日 晚上

地址:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/28/

一、题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

二、我的解决方案

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int q = 0;   //用于记录当前遍历到的0的个数
        for (int i = nums.size() - 1; i >= 0; i--) {   //从后往前遍历避免对已经后移的0重复处理
            if (nums[i] == 0) {
                nums.insert(nums.end() - q, 0);    //在数组尾第q个0之前插入一个0
                nums.erase(nums.begin() + i);     //删除nums[i]
                q++;
            }
        }
    }
};

使用了两个vector的函数insert(用于插入元素)和erase(用于删除元素)。