leetcode(双指针)283.移动零(C++)DAY3

文章目录

  • 1.题目
    • 示例
    • 提示
  • 2.解答思路
  • 3.实现代码
    • 结果
  • 4.总结

1.题目

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例

示例 1:

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

输入: nums = [0]
输出: [0]

提示

1 <= nums.length <= 104
-2^31 <= nums[i] <= 2 ^31 - 1

2.解答思路

用 i,j 遍历vector对象
其中nums[i]查找不等于0的值,交换到左侧nums[j],不断循环
nums[j]用于表示等于0的值。
参考文章:这个针对此题的动画图解非常清晰,强烈建议

3.实现代码

class Solution
{
public:
    void moveZeroes(vector<int> &nums)
    {
        int n=nums.size();

        if(n == 0)
            return;

        for(int i=0,j=0; i < n ;i++)
        {
            if(nums[i]!=0){//如果下标i的元素不等于0,交换到右侧
                if(i>j)
                    swap(nums[i],nums[j]);
                j+=1;
            }                  
        }
    }
};

结果

leetcode(双指针)283.移动零(C++)DAY3_第1张图片

4.总结

今天本来做了一个滑动窗口的题,感觉今天暂时没法弄清楚。
所以先做一道稍微简单一点的题打卡,继续学习~

你可能感兴趣的:(C++刷题,leetcode,c++,算法)