hot4-移动零

leetcode原题链接:移动零

题目描述

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]输出: [0]

解题方法:采用双指针,假设指针名为left和right。从左向右方向,left指针指向第一个0所在的位置,right指针指向left指针后第一个非0的位置,也就是说始终保持[left, right)区间的元素都是0,动态移动这个窗口。

代码如下

#include 
#include 
class Solution {
public:
    void moveZeroes(vector& nums) {
        int n = nums.size();
        int left = 0; //指向第一个0的位置
        int right = 0; //指向left后面第一个非0的位置
        // 所以,保持结构上(left, right)之间都是0
        while (right < n) {
            if (nums[right] != 0) {
                std::swap(nums[left++], nums[right]);
            }
            right++;
        }
    }
};

你可能感兴趣的:(leetcode最热100题,算法,c++,开发语言)