首页 > 其他分享 >Leetcode 283. 移动零

Leetcode 283. 移动零

时间:2023-10-28 10:06:23浏览次数:45  
标签:p1 nums ++ fast 我们 数组 283 移动 Leetcode


移动零

题目链接 283. 移动零

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

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

示例 1:

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

示例 2:

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

题目解释

这道题目的意思是我们将所有的0都移动到数组的后面,非零的元素放在前面.不过我们在移动的时候是不能够改变我们的非零元素的相对的位置的.

算法原理

这里我们可以很容易想到一个解法,我们新开辟一个数组,遍历一下我们原来的数组,如果不是零,就添加.最后将0放在我们数组的后面就可以了,下面是我们基本的想法.

vector<int> new_arr(num.size(), 0);
int index = 0;
for(i = 0; i < num.size(); ++i)
{
    if(num[i] != 0) new_arr[index++] = num[i];
}

但是,这里我们使用了一个另外的空间,不太符合题意.但是这里我们得到一个想法,下面是两个数组.

Leetcode 283. 移动零_数组

指针p1是一定不会小于p2的,那么此时我们是否可以这样想,我们让p2也是指向arr,将p1遇到的各个情况经过分析,然后赋值到p2

  • p1 指向的位置是 0
  • p1 指向的位置非 0

对于p1 非0,那么我们直接赋值,然后让p1和p2 分别自增.如果我们遇到p1是0了,那么我们不关心,让p1自增.

细节补充

这里我们谈两个

  • 我们循环的条件,按照我们的原本的想法,p1是小于我们的arr的长度的
  • 当我们循环结束后,是否是立即返回?不是的,我们需要将p2位置和后面都赋值给0.

代码编写

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int fast = 0;
        int slow = 0;
        while(fast < nums.size())
        {
            if(nums[fast] != 0)
            {
                nums[slow++] = nums[fast];
            }
            fast++;
        }
        while(slow < nums.size())
        {
            nums[slow++] = 0;
        }
    }
};


标签:p1,nums,++,fast,我们,数组,283,移动,Leetcode
From: https://blog.51cto.com/byte/8065006

相关文章

  • 让物体动起来,Unity的几种移动方式
    一、前言在大部分的Unity游戏开发中,移动是极其重要的一部分,移动的手感决定着游戏的成败,一个优秀的移动手感无疑可以给游戏带来非常舒服的体验。而Unity中有多种移动方法,使用Transform,使用刚体Rigidbody,使用CharacterController,使用NavMesh导航系统等等等等。当然,对于新手来说,最常......
  • LeetCode 2: Add Two Numbers
    https://leetcode.cn/problems/add-two-numbers/description/FinallyIjoinedaforeigncompany'sChinabranchtolearnEnglishandstartanewjourney.PS:FromnowformeseemsMoreleisurely,elegant,high-tech,andalittlewise(inleadership)compa......
  • 移动端H5使用pdf.js预览
    1.下载pdf.js文件GettingStarted(mozilla.github.io) 2.将下载的文件放进uniapp项目中 3.创建预览页面 代码:<template>   <view>      <web-view:src="allUrl"></web-view>   </view></template><script>   importrequestfro......
  • [Leetcode] 0104. 二叉树的最大深度
    104.二叉树的最大深度题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7],3/\920/\157返回它的最大深度 3。......
  • #yyds干货盘点# LeetCode程序员面试金典:生命游戏
    题目根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。给定一个包含m×n个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1即为活细胞(live),或0即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂......
  • #yyds干货盘点# LeetCode程序员面试金典:最小操作次数使数组元素相等 II
    题目给你一个长度为n的整数数组nums,返回使所有数组元素相等需要的最小操作数。在一次操作中,你可以使数组中的一个元素加1或者减1。 示例1:输入:nums=[1,2,3]输出:2解释:只需要两次操作(每次操作指南使一个元素加1或减1):[1,2,3] => [2,2,3] => [2,2,2]示......
  • leetcode98-验证二叉搜索树
    一开始没有考虑到左子树的所有节点都要小于根节点,右子树要大于根节点,本质上是边界没有考虑仔细,所以比较时需向上比较(和父节点)而不是向下比较(和子节点比大小)根节点没有父节点,因此初始化时引用最大最小值即可,注意这里的数值范围点击查看代码classSolution{publicboolean......
  • 手撸移动便签功能
    实现原理  1.位置计算(相对视口)     1.获取鼠标点击坐标     2.获取元素的坐标    3.移动时鼠标位置   2.window.onmouseup=function(){console.log('不再监听移动')//moveBar.onmousedown=nullwindow.on......
  • 2023-10-26 无法访问此网站网址为 http://xxx.yy.com/ 的网页可能暂时无法连接,或者它
    新购一域名,并添加了解析,保存后若干分钟访问该域名,报错显示:原因,我给域名添加的解析地址不正确,所以导致无法找到该服务器,故而报错。看到圈中的【记录值】了吗,这里应该填你的服务器公网ip,如果填错了就无法访问。解决方案,前往你的服务器管理后台,找到域名解析的地方,重新修改解析地......
  • 第五章:移动端事件
    typora-root-url:assetis第五章:移动端事件目标会使用移动端事件开发移动端特效移动端事件封装会使用touch.js移动端事件库1、移动端事件我们之前学习的电脑端事件,点击,双击,鼠标事件等,在手机端是没有的,因为我们很少见到有人在手机上用一个鼠标进行操作,取而代之的是触摸事件等点击事......