【C++习题】2.双指针_移动零

news2024/11/15 16:47:51

文章目录

    • 题目链接:
    • 题目描述:
    • 解法(快排的思想:数组划分区间 - 数组分两块):
    • C++ 算法代码:
    • 图解


题目链接:

283.移动零


题目描述:

8ae324a8c2586aec8c1d8dd5879035e8


解法(快排的思想:数组划分区间 - 数组分两块):

双指针算法,利用数组下标充当指针。

我们可以用一个 cur 指针来扫描整个数组,另一个 dest 指针用来记录非零数序列的最后一个位置。根据 cur 在扫描的过程中,遇到的不同情况,分类处理,实现数组的划分。

cur 遍历期间,使 [0, dest] 的元素全部都是非零元素, [dest + 1, cur - 1] 的元素全是零。

127e769b240c2db89634662a2a181c02

遇到0元素:

cur++

遇到非0元素:

swap(dest+1, cur)

dest++, cur++


C++ 算法代码:

class Solution 
{
public:
    void moveZeroes(vector<int>& nums) 
    {
        for(int cur = 0, dest = -1; cur < nums.size(); cur++)
            if(nums[cur]) // 处理非零元素nums[cur]!=0
                swap(nums[++dest], nums[cur]);
    }
};

如果遇到0元素,cur++。也就是for(int cur = 0, dest = -1; cur < nums.size(); cur++)的末尾那句。

如果遇到非0元素,先swap(dest+1, cur)然后dest++, cur++。这里合并为 swap(nums[++dest], nums[cur]);


图解

  1. 开始:

d982048a769acad16bdca6c46649f308

  1. nums[cur]=0,不进入if条件,cur++

21842c468e1c458409b958b969586c08

  1. nums[cur]=1,进入if条件,交换++destcur位置的元素

9823e1d8ede2d6afa055aa794ace2869

  1. 然后cur++

4dcb2c872a675d23093405db3ec5ff33

  1. nums[cur]=0,不进入if条件,cur++

6d360d2972bbf066fb91bc68fad97457

  1. nums[cur]=3,进入if条件,交换++destcur位置的元素

4ae4908e4dd93655f2a980dcf389a133

  1. 然后cur++

8b807164ad280716ef2b916f1b8d374a

  1. nums[cur]=12,进入if条件,交换++destcur位置的元素

bbaa80e08655051b5389fac802a1f0bb

  1. 然后cur++

    不满足cur < nums.size();跳出循环

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

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

相关文章

聚铭下一代智慧安全运营中心荣获CNNVD兼容性资质证书

近日&#xff0c;聚铭网络旗下安全产品——聚铭下一代智慧安全运营中心正式通过了国家信息安全漏洞库&#xff08;CNNVD&#xff09;兼容性认证测试&#xff0c;荣获国家信息安全漏洞库兼容性资质证书。 关于CNNVD兼容性 国家信息安全漏洞库&#xff08;CNNVD&#xff09;是…

Iceberg 基本操作和快速入门

安装 Iceberg 是一种适用于大型分析表的高性能工具&#xff0c;通过spark启动并运行iceberg&#xff0c;文章是通过docker来进行安装并测试的 新建一个docker-compose.yml文件 文件内容 version: "3" services: spark-iceberg: image: tabulario/spark-iceberg co…

干部画像如何精准科学识别优秀干部

干部画像作为一种精准、科学的评价工具&#xff0c;在识别优秀干部方面发挥着关键作用。通过全面、深入、系统地收集、整理和分析干部的多维度信息&#xff0c;形成一幅反映干部综合素质和能力的立体画卷&#xff0c;为组织部门提供了详实可靠的依据。以下是干部画像在精准、科…

Colorful/七彩虹将星X15 AT22 2022 Win11原厂OEM系统 带COLORFUL一键还原

安装完毕自带原厂驱动和预装软件以及一键恢复功能&#xff0c;自动重建COLORFUL RECOVERY功能&#xff0c;恢复到新机开箱状态。 【格式】&#xff1a;iso 【系统类型】&#xff1a;Windows11 原厂系统下载网址&#xff1a;http://www.bioxt.cn 注意&#xff1a;安装系统会…

Exception in thread “main“ java.lang.CloneNotSupportedException 解决方案

目录 前言&#xff1a; 解决方案 后言&#xff1a; 结言&#xff1a; 前言&#xff1a; 今天在学习设计模式的时候&#xff0c;犯的一个错误。很低级的错误&#xff0c;不过也记录一下&#xff08;绝对不是想水文章&#xff09;。 解决方案 在使用克隆方法时抛出这个异…

2024年第五届电力工程国际会议(ICPE 2024)将在上海召开!

为了总结交流我国电力研究技术的最新研究成果&#xff0c;促进国内外电力技术发展与交流&#xff0c;开拓电力技术应用领域&#xff0c;将于2024年12月13-15日在 中国上海举办第五届电力工程国际会议 (ICPE 2024) 。 本次会议由IEEE、PES、上海电力大学主办&#xff0c;电子科技…

猜想的反例:DFS中结点顺序与后代关系的分析

猜想的反例:DFS中结点顺序与后代关系的分析 猜想分析与反例构造反例描述伪代码与C代码实现反例验证在图论中,深度优先搜索(DFS)是一种重要的图遍历算法,它可以生成一棵深度优先森林(DFS Forest),揭示结点之间的祖先-后代关系。本文探讨一个特定猜想:如果有向图G包含一…

Linux服务器安装Anaconda环境

Linux浪潮云服务器安装Anaconda环境 读研之后在导师的帮助下&#xff0c;获得了浪潮的一台公共云服务器。以后做实验跑代码就可以使用云服务器上的虚拟环境了。减少了自己笔记本的压力。在创建并保存完成镜像环境之后。最重要的就是安装好深度学习需要的Anaconda环境&#xff0…

vue-i18n在使用$t时提示类型错误

1. 问题描述 Vue3项目中&#xff0c;使用vue-i18n&#xff0c;在模版中使用$t时&#xff0c;页面可以正常渲染&#xff0c;但是类型报错。 相关依赖版本如下&#xff1a; "dependencies": {"vue": "^3.4.29","vue-i18n": "^9.1…

MES管理系统的工单管理功能模块有什么用

在当今制造业的快速发展中&#xff0c;企业对于生产流程的高效管理与优化需求日益迫切。MES管理系统作为集成了生产计划、物料追踪、工艺执行、设备监控以及质量管理等核心功能的综合性软件平台&#xff0c;正逐步成为企业转型升级的关键驱动力。MES管理系统不仅通过实时数据洞…

鸿蒙界面开发——组件(9):进度条Progress 滑动条Slider

进度条 (Progress) Progress(options: {value: number, total?: number, type?: ProgressType})其中&#xff0c;value用于设置初始进度值&#xff0c;total用于设置进度总长度&#xff0c;type用于设置Progress样式。 Progress有5种可选类型&#xff0c;通过ProgressType可…

必应bing搜索广告如何开户?投放需要多少钱?

网络营销已成为企业增长不可或缺的一部分&#xff0c;为了帮助企业更高效地触达目标客户&#xff0c;云衔科技携手必应Bing搜索引擎&#xff0c;提供专业、便捷的广告开户与代运营服务。无论您是希望扩大品牌影响力&#xff0c;还是提升产品销量&#xff0c;选择云衔科技&#…

阻塞型IO与非阻塞型IO

阻塞IO与非阻塞IO 一.IO模型 IO的本质是基于操作系统接口来控制底层的硬件之间数据传输&#xff0c;并且在操作系统中实现了多种不同的IO方式&#xff08;模型&#xff09;&#xff0c;比较常见的有下列三种 阻塞型IO模型非阻塞型IO模型多路复用IO模型(重点!重点!重点!) 二…

KVM 安装 Windows11

在 KVM 安装 Windows 比安装 Ubuntu 会复杂一些&#xff0c;去微软官网下载 Win11&#xff0c;同时要下载 Virtio 可以从 Fedora 下载 &#xff08;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/&#xff09;。 安装Window 命令行输入以下命令&#xf…

uniapp数据缓存

利用uniapp做开发时&#xff0c;缓存数据是及其重要的&#xff0c;下面是同步缓存和异步缓存的使用 同步缓存 在执行同步缓存时会阻塞其他代码的执行 ① uni.setStorageSync(key, data) 设置缓存&#xff0c;如&#xff1a; uni.setStorageSync(name, 张三) ② uni.getSt…

Python 课程21-Django

前言 在当今互联网时代&#xff0c;Web开发已成为一项必备技能。而Python作为一门简洁、高效的编程语言&#xff0c;其Web框架Django以其强大的功能和快速开发的特点&#xff0c;受到了广大开发者的青睐。如果你想深入学习Django&#xff0c;构建自己的Web应用&#xff0c;那么…

呼吸自救防护器的使用方式

呼吸自救防护器是一种用于在紧急情况下提供呼吸保护的设备&#xff0c;通常用于矿井、化工厂、火灾等环境。当出现缺氧、有毒有害气体泄漏或烟雾等紧急情况时&#xff0c;呼吸自救防护器可以提供氧气或过滤空气&#xff0c;帮助使用者在短时间内安全呼吸&#xff0c;逃离危险区…

十大常用加密软件排行榜|2024年好用的加密软件推荐,企业必备!

在信息安全日益受到重视的当今&#xff0c;选择合适的加密软件对于企业保护敏感数据至关重要。以下是2024年十大常用加密软件排行榜&#xff0c;助您提升数据安全性。 Ping32 Ping32是一款功能强大的加密软件&#xff0c;支持多种文件格式加密&#xff0c;用户界面友好&#xf…

【机器学习】 Flux.jl 求解 XOR 分类问题的神经网络模型

Flux.jl 搭建神经网络基本流程 #mermaid-svg-JuKPmnLqTqDhEhKf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JuKPmnLqTqDhEhKf .error-icon{fill:#552222;}#mermaid-svg-JuKPmnLqTqDhEhKf .error-text{fill:#5522…

【前端】35道JavaScript进阶问题

来源&#xff1a; javascript-questions/zh-CN/README-zh_CN.md at master lydiahallie/javascript-questions GitHub 记录一些有趣的题。 1 输出是&#xff1f; const shape {radius: 10,diameter() {return this.radius * 2},perimeter: () > 2 * Math.PI * this.rad…