LeetCode每日一题之专题一:双指针 ——移动零

移动零OJ链接:283. 移动零 - 力扣(LeetCode)

题目:

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

在本题中,我们可以用一个 dest 指针来扫描整个数组,另一个 src 指针用来记录非零数序列
的最后一个位置。根据 dest 在扫描的过程中,遇到的不同情况,分类处理,实现数组的划分。
在 dest 遍历期间,使 [0, src] 的元素全部都是非零元素, [src + 1, dest - 1] 的元素全是零。

 

算法流程:
a. 初始化dest=0(用来遍历数组), src = -1 (指向非零元素序列的最后⼀个位置。
因为刚开始我们不知道最后一个非零元素在什么位置,因此初始化为 -1 )
b. cur 依次往后遍历每个元素,遍历到的元素会有下面两种情况:
i. 遇到的元素是 0 , dest 直接 ++ 。因为我们的目标是让 [src + 1, dest - 1] 内的元素全都是零,因此当 dest 遇到 0 的时候,直接 ++ ,就可以让 0 在 dest - 1的位置上,从而在 [src + 1, dest - 1] 内;
ii. 遇到的元素不是 0 , src++ ,并且交换 dest 位置和 src 位置的元素,之后让 dest++ ,扫描下一个元素。
• 因为 src 指向的位置是非零元素区间的最后一个位置,如果扫描到一个新的非零元素,那么它的位置应该在 src + 1 的位置上,因此 src 先自增 1 ;
• src++ 之后,指向的元素就是 0 元素(因为非零元素区间末尾的后一个元素就是0 ),因此可以交换到 dest 所处的位置上,实现 [0, src] 的元素全部都是非零元素, [src + 1, dest - 1] 的元素全是零。

 

 

C++:

class Solution {
public:void moveZeroes(vector<int>& nums) {for(int dest=0,src=-1;dest<nums.size();dest++){if(nums[dest]){swap(nums[++src],nums[dest]);}}}
};

运行结果: 

复杂度分析: 

时间复杂度:O(N)

空间复杂度:O(1)

PS:看到这里了,码字不易,给个一键三连鼓励一下吧!有不足或者错误之处欢迎在评论区指出! 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 高级

文章目录 Nginx反向代理概念配置 负载均衡概念配置 动静分离概念配置 网关防盗链keepalivednginx跨域 Nginx 反向代理 概念 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&…

美联储,非必要,不降息

美联储“没必要、没空间、没动力”降息&#xff0c;也会尽量避免货币政策干扰大选&#xff0c;用“口头降息”代替实际调整是现实选择&#xff0c;市场降息预期将继续推迟和下调。 前言&#xff1a; 当前美国经济从各个方面看均并未表现出疲态——新增就业持续修复&#xff0c;…

JVM 内存溢出排查

说明&#xff1a;记录一次JVM内存溢出的排查过程&#xff1b; 场景 项目开发完成后&#xff0c;首次提交到测试环境。测试、产品同事反馈页面先是操作响应慢&#xff0c;抛出超时异常&#xff0c;最后直接无法使用。查看日志后得知是内存溢出。 重启服务后&#xff0c;我对前…

苹果开发者账号注册后生成开发证书和发布证书的流程解析

转载&#xff1a;注册苹果开发者账号的方法 在2020年以前&#xff0c;注册苹果开发者账号后&#xff0c;就可以生成证书。 但2020年后&#xff0c;因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号&#xff0c;所以需要缴费才能创建ios证书了。 所以新政策出…

使用kubeadm工具搭建Kubernetes集群

本文目录 一、CentOS7最小化安装&#xff08;master&#xff09;1、下载ISO镜像2、安装3、进入centos安装界面4、安装最小化安装必要的一些工具 二、克隆虚拟机&#xff08;node1、node2&#xff09;三、基础配置1、节点规划——部署架构图2、防火墙和SElinux配置2、主机名和ho…

关于不同AR(增强现实)SDK(软件开发工具包)的汇总和特性描述

以下是每个AR SDK的核心内容概述: ARCore 开发者:Google支持平台:Android(部分设备不支持)功能:运动追踪、平面追踪、点云图、云锚点、光照估计、环境探针、人脸追踪、2D图片追踪、人物遮挡、射线测试。官网链接:ARCoreARKit 开发者:Apple支持平台:iOS(iPhone和iPad)…

2024年最新版FL Studio21.2.3 Build 4004 for Mac 版激活下载和图文激活教程

FL studio21中文别名水果编曲软件&#xff0c;是一款全能的音乐制作软件&#xff0c;包括编曲、录音、剪辑和混音等诸多功能&#xff0c;让你的电脑编程一个全能的录音室&#xff0c;它为您提供了一个集成的开发环境&#xff0c;使用起来非常简单有效&#xff0c;您的工作会变得…

合并两个单链表

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 但行前路&#xff0c;不负韶华&#…

环信IM集成教程——Web端UIKit快速集成与消息发送

写在前面&#xff1a; 千呼万唤始出来&#xff0c;环信Web端终于出UIKit了&#xff01;&#x1f389;&#x1f389;&#x1f389; 文档地址&#xff1a;https://doc.easemob.com/uikit/chatuikit/web/chatuikit_overview.html 环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开…

微信小程序自定义弹窗组件

业务背景&#xff1a;弹窗有时字体较多&#xff0c;超过7个字&#xff0c;不适用wx.showToast. 组件代码 <view class"toast-box {{isShow? show:}}" animation"{{animationData}}"><view class"toast-content" ><view class&q…

2024总结的vue3的面试题

一、vue2和vue3的区别 答案&#xff1a; 1、数据绑定原理不同 vue2&#xff1a;vue2的数据绑定是利用ES5的一个API&#xff1a;Object.definePropert() 对数据进行劫持&#xff0c;结合发布订阅模式的方式来实现的。 vue3&#xff1a;vue3中使用了ES6的Proxy API对数据代理…

大数据学习第十二天(hadoop概念)

1、服务器之间数据文件传递 1&#xff09;服务器之间传递数据&#xff0c;依赖ssh协议 2&#xff09;http协议是web网站之间的通讯协议&#xff0c;用户可已通过http网址访问到对应网站数据 3&#xff09;ssh协议是服务器之间&#xff0c;或windos和服务器之间传递的数据的协议…