LeetCode.283移动零(双指针)

news2024/9/24 18:43:18

LeetCode.283移动零

  • 1.问题描述
  • 2.解题思路
  • 3.代码

1.问题描述

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

2.解题思路

双指针

  • 设置两个指针指向开头元素。一个fast指针,一个slow指针
  • fast指针向右移动,如果元素为0,不执行操作,向右移动,如果元素不为0,将fast指针所指元素,移到slow指针所在的位置,slow指针向右移动一位
  • 当fast指针向右移动出界之后,将当前slow指针指向元素及其之后元素设置为0

3.代码

python:双指针

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        // 设置一个变量,用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上
        // 一开始默认在索引为 0 的位置
        int slow = 0;
        for (int fast = 0; fast < nums.size(); fast++) {
            // 在遍历过程中,如果发现访问的元素是非 0 元素
            // 说明 slow 不在正确的位置上,需要向后移动,寻找合适的位置
            if (nums[fast] != 0) {
                // 这个时候,原先 slow 的值需要被 fast 的值覆盖
                nums[slow] = nums[fast];
                // slow 需要向后移动,寻找合适的位置
                slow++;
            }
        }

        // 接下来,只需要把 slow 极其后面所有的元素都设置为 0 就行
        for (int i = slow; i < nums.size(); i++) {
            nums[i] = 0;

        }
    }
};

C++:双指针

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        // 设置一个变量,用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上
        // 一开始默认在索引为 0 的位置
        int slow = 0;
        for (int fast = 0; fast < nums.size(); fast++) {

            // 在遍历过程中,如果发现访问的元素是非 0 元素
            // 说明 slow 不在正确的位置上,需要向后移动,寻找合适的位置
            if (nums[fast] != 0) {
                // 这个时候,原先 slow 的值需要被 fast 的值覆盖
                nums[slow] = nums[fast];
                // slow 需要向后移动,寻找合适的位置
                slow++;
            }
        }

        // 接下来,只需要把 slow 极其后面所有的元素都设置为 0 就行
        for (int i = slow; i < nums.size(); i++) {

            // 都设置为 0 
            nums[i] = 0;

        }
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在一个页面里向两张表里插入内容时,有一些复杂的BUG简单化

向两张表里插入内容时&#xff0c;有一些复杂的BUG简单化 当在第一张表里的页面操作&#xff0c;在第一张表查询结果的页面进行编辑&#xff0c;在编辑的时候需要对第二张表里和第一张表都保存内容&#xff0c;而且插入之后两张表的id关联着&#xff0c;这个时候这张表的id就不…

【LeetCode】挑战100天 Day12(热题+面试经典150题)

【LeetCode】挑战100天 Day12&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-142.1 题目2.2 题解 三、面试经典 150 题-143.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

2023年度全国国土变更调查工作相关技术文档、质检软件

1.资料清单&#xff1a; (1)01技术文件 2023年度国土变更调查数据库建设技术要求.pdf 2023年度全国国土变更调查实施方案.doc 附件1.国土调查数据库更新数据规范&#xff08;2023年度&#xff09;.pdf 附件2.国土调查数据库更新变更规则&#xff08;2023年度&#xff09;.pdf…

unity3d人物由静止到跑,出现人物漂移一段距离后再跑

减少动画切换过程中第一个动画的时间&#xff0c;交叉部分适当调小&#xff0c;动作切换就顺畅了

大模型生态新篇章:以AI Agent为引,助企业创新应用落地

文 | 智能相对论 作者 | 沈浪 以聊天机器人、虚拟助手、智能客服等为代表的对话式人工智能 (Conversational AI Agents ) 在具体服务场景中的应用已经十分普遍。今年以来&#xff0c;随着大模型技术的爆发与加持&#xff0c;对话式AI被市场赋予了更高的期望。 “所有行业都值…

C语言——指针(一)

&#x1f4dd;前言 这篇文章主要带大家初步认识一下指针&#xff0c;供大家理解参考。 主要归纳与讲解&#xff1a; 1&#xff0c;指针与指针变量 2&#xff0c;指针的基本使用&#xff08;如何定义&#xff0c;初始化&#xff0c;引用&#xff09; &#x1f3ac;个人简介&…

线性回归中的函数求导

在线性回归中&#xff0c;函数求导是一个重要的数学工具&#xff0c;用于计算损失函数关于模型参数的导数。通过求导&#xff0c;我们可以找到最优的参数值&#xff0c;以实现更好的线性回归拟合。 本文将介绍线性回归的基本原理&#xff0c;以及如何通过函数求导来优化线性回…

【JavaEE】Spring小练习——存储和获取对象

一、题目&#xff1a; 在 Spring 项目中&#xff0c;通过 main 方法获取到 Controller 类&#xff0c;调用 Controller 里面通过注入的方式调用Service 类&#xff0c;Service 再通过注入的方式获取到 Repository 类&#xff0c;Repository 类里面有一个方法构建⼀个 User 对象…

掌动智能带您深入了解业务连续性演练

业务连续性演练是一种有目的的模拟活动&#xff0c;旨在测试和评估组织业务连续性计划的有效性。这涉及到模拟各种可能的业务中断情况&#xff0c;以便团队可以在真实事件发生时做出迅速、协调的响应。 一、业务连续性演练设计原则 全面性&#xff1a;涵盖所有关键业务流程&…

shell 条件语句 if case

目录 测试 test测试文件的表达式 是否成立 格式 选项 比较整数数值 格式 选项 字符串比较 常用的测试操作符 格式 逻辑测试 格式 且 &#xff08;全真才为真&#xff09; 或 &#xff08;一真即为真&#xff09; 常见条件 双中括号 [[ expression ]] 用法 &…

unity Terrain 性能问题

在实践过程中unity发生进入场景GPU爆显存的情况&#xff0c;经过调查发现是使用Terrain造成的问题&#xff0c;这个问题在使用一个Terrain的时候并不会发生&#xff0c;但是在使用多个时会发生。 似乎在使用过程中Terrain会直接把Terrain的整个地图加载&#xff0c;造成移动设…

前缀树及其实现解析

前缀树 前缀树&#xff1a;又称单词查找树或键树&#xff0c;是一种哈希树的变种。 典型应用是用于统计和排序大量的字符串&#xff08;但不仅限于字符串&#xff09; 利用字符串的公共前缀来减少查询时间&#xff0c;最大限度地减少无谓的字符串比较。 将一组字符串数组放入…

Web 自动化神器 TestCafe(三)—用例编写篇

一、用例编写基本规范 1、 fixture 测试夹具 使用 TestCafe 编写测试用例&#xff0c;必须要先使用 fixture 声明一个测试夹具&#xff0c;然后在这个测试夹具下编写测试用例&#xff0c;在一个编写测试用例的 js 或 ts 文件中&#xff0c;可以声明多个测试夹具 fixture(测试…

内容营销频频出圈,这些品牌号做对了什么?

小红书拥有大量的年轻用户&#xff0c;通过运营品牌号既能降低投放成本&#xff0c;又能更好地连接消费者和品牌&#xff0c;在平台完成一站式闭环营销。 今天就借助几个成功案例&#xff0c;来分析下他们是如何搭建官方账号&#xff0c;通过内容运营吸引更多用户&#xff0c;实…

基于qemu_v8+optee 3.17平台的ca/ta Demo

1、整体集成构建 基于官方构建&#xff0c;加入自定义ca/ta后一体构建到rootfs&#xff0c;在qemu上运行 $ mkdir -p <optee-project> $ cd <optee-project> $ repo init -u https://github.com/OP-TEE/manifest.git -m ${TARGET}.xml [-b ${BRANCH}] $ repo syn…

【带头学C++】----- 八、C++面向对象编程 ---- 8.1 面向对象编程概述

目录 8.1 面向对象编程概述 8.1.1 面向对象概念&#xff08;OOP&#xff09; 8.1.2 面向过程概念 8.1 面向对象编程概述 8.1.1 面向对象概念&#xff08;OOP&#xff09; 面向对象&#xff08;Object-Oriented&#xff09;是一种编程范式&#xff0c;它将程序设计中的数据和…

ROS1创建自定义服务并使用

1.首先在功能包创建一个srv文件夹 如上图所示&#xff0c;vehicle_control是我的功能包&#xff0c;创建一个srv文件夹 2.使用touch指令创建服务文件 touch Ranging.srv3.在文件内输入服务数据 横线代表分割符&#xff0c;上面的是客户端发送的数据&#xff0c;下面是服务器…

Linux设置静态IP

Linux设置静态IP 使用ip addr查看ip&#xff0c;如下所示就是动态IP 1、什么是静态IP&#xff1f; 静态ip就是固定的ip&#xff0c;需要手动设置。静态IP地址&#xff08;又称固定IP地址&#xff09;是长期分配给一台计算机或网络设备使用的 IP 地址。一般来说&#xff0c;一…

C++的new / delete 与 C语言的malloc/realloc/calloc / free 的讲解

在C语言中我们通常会使用malloc/realloc/calloc来动态开辟的空间&#xff0c;malloc是只会开辟你提供的空间大小&#xff0c;并不会初始化内容&#xff1b;calloc不但会开辟空间&#xff0c;还会初始化&#xff1b;realloc是专门来扩容的&#xff0c;当你第一次开辟的空间不够用…