Move Zeroes(leetcode)

来源:互联网 发布:视频特效制作软件哪些 编辑:程序博客网 时间:2024/06/08 09:54

Move Zeroes

  • Move Zeroes
    • 题目
    • 解决
      • 利用vector的函数及性质
      • 将非0数提前


题目

leetcode题目

Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements.

For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

解决

1. 利用vector的函数及性质

当发现0的时候,利用vector的函数erase()0删除,之后再将0加进数组中。这样就能不会改变vector中原来非0的数的顺序。

class Solution {public:    void moveZeroes(vector<int>& nums) {        int num = nums.size();        vector<int>::iterator it = nums.begin();        for (int i = 0; i < num; i++) {            if ((*it) == 0) {                nums.erase(it);                nums.push_back(0);            } else {                it++;            }        }    }};

2. 将非0数提前

遍历数组,将每一个非0数提前,直到前面没有0为止。同时记录最后一个非0的数在新数组中的位置index,从下标为index + 1添加0直到index == n

class Solution {public:    void moveZeroes(vector<int>& nums) {        int num = nums.size();        int index = 0;        for (int i = 0; i < num; i++) {            if (nums[i] != 0) {                int temp = nums[i];                nums[i] = nums[index];                nums[index++] = temp;            }        }        while (index < num) {            nums[index++] = 0;        }    }};
原创粉丝点击