刷题笔记:day 1
力扣 283 移动零

解法一:双指针
定义一个指针 cur 去遍历数组 ; 定义一个指针 dest 去指向已处理区间中,非零的最后一个位置。

然后让 指针 cur 遇到 0 ,就往后走 ; 遇到的数不是 0 ,就与 dest指针的下一个数交换位置,直至将数组遍历结束为止。

cur 指向不是0 的位置

让dest+1位置的数与cur 位置的数交换,swap(nums[cur], nums[dest+1)

两个指针的向前走一步。
代码实现:
class Solution {
public:void moveZeroes(vector<int>& nums) {int dest = -1;int cur = 0;while(cur < nums.size()){if(nums[cur] == 0){cur++;}else{swap(nums[dest+1],nums[cur]); //有封装的交换函数dest++; //vector里面封装的swap是将两个数组进行交换,而不是两个数cur++;}}}
};
解法二:
同样使用双指针,i 和 j ,不过不是使用交换,而是将后面的非零元素覆盖前面的0元素。
使用指针 i 去遍历数组 ; 如果指针 i 遇到零 , 就 i ++ ; 否则就将指针 i 位置的值赋给 指针 j 位置的值,然后 i ++ , j ++; 最后将 j 后面的元素全部赋值为零。
class Solution {
public:void moveZeroes(vector<int>& nums) {int i = 0, j = 0;while(i<nums.size()){if(nums[i] ==0){i++;}else{nums[j] = nums[i];j++;i++;}}//将 j 后面的元素赋值为0 while(j<nums.size()){nums[j] = 0;++j;}}
};
解法三:
使用指针 cur 遍历数组 , 如果遇到零 , 删除当前位置的零元素,并在数组末尾插入一个零元素;如果遇到的不是零, cur直接往后面走一位。
class Solution {
public:void moveZeroes(vector<int>& nums) {int len = nums.size(); // 用len来限制循环次数int cur = 0 ;while(len > 0){if(nums[cur] ==0){nums.erase(nums.begin()+cur);nums.push_back(0);}else{++cur;}--len;}}
};
解法四:
用来优化解法三的算法,解法三中,在指针cur 走到后面全零区间的第一个元素时,就已经满足题目要求的结果了,应当结束,但解法三多走了 x 步(x为数组nums中零元素的个数),因此需要记录数组非零元素的个数,当指针 cur 等于非零元素个数时,就结束循环。
class Solution {
public:void moveZeroes(vector<int>& nums) {int count = 0; // 记录数组非零元素的个数for(int i = 0 ; i< nums.size();++i){if(nums[i] !=0){++count;}}int cur = 0 ;while(cur < nums.size()){if(nums[cur] ==0){if(cur == count){break;}nums.erase(nums.begin()+cur);nums.push_back(0);}else{++cur;}}}
};
相关文章:
刷题笔记:day 1
力扣 283 移动零 解法一:双指针 定义一个指针 cur 去遍历数组 ; 定义一个指针 dest 去指向已处理区间中,非零的最后一个位置。 然后让 指针 cur 遇到 0 ,就往后走 ; 遇到的数不是 0 ,就与 dest指针的下…...
Linux——平台设备及其驱动
目录 前言 一、平台设备 二、平台驱动 三、平台驱动简单实例 四、 电源管理 五、udev 和驱动的自动加载 六、使用平台设备的LED 驱动 七、自动创建设备节点 前言 要满足 Linux 设备模型,就必须有总线、设备和驱动。但是有的设备并没有对应的物理总线&#x…...
【C语言技巧】三种多组输入的写法
文章目录 第一种:直接与1判断第二种:与EOF判断第三种:巧用按位取反符号“~”写在最后 在代码的实际运用中,我们经常会遇到需要多组输入的情况,那么今天博主就带大家一起盘点三种常见的多组输入的写法 第一种࿱…...
DB2数据库巡检脚本
DB2数据库巡检脚本的示例: #!/bin/bash# 设置DB2登录凭证 DB2_USER"your_username" DB2_PASSWORD"your_password"# 设置巡检结果输出文件路径 OUTPUT_FILE"/path/to/output.log"# 获取DB2版本信息 version_info$(db2 connect to you…...
Eureka 学习笔记3:EurekaHttpClient
版本 awsVersion ‘1.11.277’ EurekaTransport 用于客户端和服务端之间进行通信,封装了以下接口的实现: ClosableResolver 接口实现TransportClientFactory 接口实现EurekaHttpClient 接口实现及其对应的 EurekaHttpClientFactory 接口实现 private …...
Android Framework 之 启动流程
Android 系统的启动流程 Android 系统的启动流程可以分为以下几个主要步骤: 引导加载器(Bootloader)启动:当你打开一个 Android 设备时,首先启动的是引导加载器。引导加载器负责启动 Android 的核心操作系统。 Linux…...
Qt、C/C++环境中内嵌LUA脚本、实现LUA函数的调用执行
Qt、C/C环境中内嵌LUA脚本、实现LUA函数的调用执行 Chapter1. Qt、C/C环境中内嵌LUA脚本、实现LUA函数的调用执行1、LUA简介2、LUA脚本的解释器和编译器3、C环境中内嵌LUA执行LUA函数调用4、Qt内嵌LUA执行LUA函数调用5、运行结果6、内嵌LUA脚本在实际项目中的案例应用 Chapter1…...
超详细 | 模拟退火算法及其MATLAB实现
模拟退火算法(simulated annealing,SA)是20世纪80年代初期发展起来的一种求解大规模组合优化问题的随机性方法。它以优化问题的求解与物理系统退火过程的相似性为基础,利用Metropolis算法并适当地控制温度的下降过程实现模拟退火,从而达到求解…...
在线餐饮油烟实时监测系统的设计与实现
安科瑞 华楠 摘 要:为了解决传统油烟检测方法中成本高、效率低、实时性差等问题,设计开发了一种在线油烟实时监测系统;系统由采集、通讯、服务器和用户交互四个模块组成;采集模块采集油烟数据,通过GPRS通讯技术将数据发…...
7-2 凯撒密码 (20分)
7-2 凯撒密码 (20分) 为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单…...
LeetCode_贪心算法_中等_763.划分字母区间
目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍…...
【算法提高:动态规划】1.5 状态压缩DP TODO
文章目录 状态压缩DP例题列表棋盘式1064. 小国王⭐🐂(好题!)做题套路总结 327. 玉米田(好题!🐂 和1064. 小国王差不多的题目)292. 炮兵阵地(和上面两道题差不多ÿ…...
建网站一般使用Windows还是liunx好?
建网站一般使用Windows还是liunx好? 1;服务器配置比较低时,最好使用linux系统。 对于一个电脑新手,刚开始做网站时,都会选择入门级的服务器,我刚开始做网站时,就是这样的。我购买了一台入门级服…...
NodeJs后端项目使用docker打包部署
docker安装看之前的文章 默认已经安装好docker并且配置没有问题 拉取项目 https://gitee.com/coder-msc/docker-node 本地跑一个看看 pnpm install pnpm start 本地访问 http://localhost:1301/getname?name%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9项目整个上传服务器 查看…...
ARM单片机中断处理过程解析
前言 中断,在单片机开发中再常见不过了。当然对于中断的原理和执行流程都了然于胸,那么对于ARM单片机中断的具体处理行为,你真的搞清楚了吗? 今天来简单聊一聊,ARM单片机中断处理过程中的具体行为是什么样的…...
关于SEDEX会员与平台的相关问题汇总
【关于SEDEX会员与平台的相关问题汇总】 01.会员资格有效期是多久? Sedex会员资格有效期为12个月,您也可以选择更长期的会员资格。您支付会员年费时,在“订阅信息”框下的“延长订阅期限”中输入年数,即可获得更长的会员资格时效。…...
解读Spring-context的property-placeholder
在spring中,如果要给程序定义一些参数,可以放在application.properties中,通过<context:property-placeholder>加载这个属性文件,然后就可以通过value给我们的变量自动赋值,如果你们的程序可能运行在多个环境中&…...
【Rust】枚举类型创建单链表以及常见的链表操作方法
目录 单链表 用枚举表达链表 枚举enum Box容器 创建节点 1. 创建并打印 2. match 匹配 3. 节点初始化 4.节点嵌套 追加节点 1. 尾插法 2. 链表追加方法 3. 头插法 4. 改写成单链表方法 遍历链表 1. 递归法 2. 递推法 3. 改写成单链表方法 自定义Display tr…...
Excel 两列数据中相同的数据进行同行显示
一、要求 假设您有两个列,分别是A列和B列,需要在C列中找出A列对应的B列的值。 二、方案 方法1:寻常思路 凸显重复项对A列单独进行筛选–按颜色进行排序,然后升序对B列重复上述操作即可 方法2:两个公式 VLOOKUP 纵向查找…...
Windows本地安装配置Qcadoo MES系统
简介 Qcadoo MES是一款功能强大且灵活的开源MES(制造执行系统),旨在为制造业务提供全面的管理和监控解决方案。本篇博客将教您如何在Windows操作系统上安装和配置Qcadoo MES系统,以便您能够轻松管理和监控制造过程。 环境要求 …...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
