LeetCode算法日记 - Day 1: 移动零、复写零

目录

1. 移动零

1.1 思路解析

1.2 代码实现

2. 复写零

2.1 思路解析

2.2 代码实现


1. 移动零

283. 移动零 - 力扣(LeetCode)

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

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

示例 1:

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

示例 2:

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

我们可以用双指针来解决上方问题,这里的双指针用数组下标代替与C++的指针作区分。此问题不涉及整个数组的平移。

1.1 思路解析

a)先定义两个指针,dest 和 cur,我们可以让 cur 来遍历整个数组。

b)我们可以用双指针来把整个数组分为三个区域:[0,dest] 非零区域、[dest+1,cur-1] 零区域、[cur,n-1] 待处理区域。上述问题我在之后将统一称为数组划分问题。

c)具体的思路是,让 cur 从零开始,dest 从 -1位置开始。当 cur 遇到零元素时跳过 cur++,当 cur 遇到非零元素时 dest++ ,并且让当前 cur 所指元素和 dest++ 后的所指元素交换位置。

1.2 代码实现

class Solution {public void moveZeroes(int[] nums) {for(int cur = 0,dest = -1; cur<nums.length;cur++){if(nums[cur] != 0){int tmp = nums[cur];dest++;nums[cur] = nums[dest];nums[dest] = tmp;}}}
}

2. 复写零

1089. 复写零 - 力扣(LeetCode)

2.1 思路解析

a)我们可以定义双指针来解决该问题,定义 cur 和 dest。

b)cur 遇到的情况分为两种,遇到零 和 非零元素。

c)我们可以让 cur 遇到非零元素时,dest 在当前位置复写一个;同理 cur 遇到零元素时,dest 在当前位置和后一位复写两个零。

但是如果我们从左往右来进行操作,如果遇到 [1,0,2,1] 这种数组的话,操作结果就不符合题目要求,因为 dest 已经在 cur 前面了,会造成数据丢失。如下图所示:

所以我们需要转变思路:

a)先找到最后一个复写的数

先定义两个指针 cur 和 dest,让 cur 的初始值为0,dest 初始值为 -1。让 dest 走 cur 遍历的数来判断最后一个复写的数。当 cur 遇到非零元素时,dest 移动一位,cur 遇到零元素时,dest 移动两位。当 dest 遍历完整个数组时,cur 所指的下标就是最后一个复写的数。

b)处理边界问题

当我们遇到类似 [2,0,3,5,0,4] 这样的数组时就会发生 dest 所在的位置越界情况,从后向前的复写操作就会报错,解决方案就是 arr[dest-1] = 0; cur --;dest -= 2。越界情况如下图所示:

c)从后向前完成复写操作

当 cur 遇到非零元素时,把 cur 的元素覆盖到 dest 所在的位置,arr[dest--] = arr[cur--];当 cur 遇到零元素时,把零元素覆盖到 dest 当前位置和前一位。

2.2 代码实现
class Solution {public void duplicateZeros(int[] arr) {int cur = 0, dest = -1;while(cur<arr.length){if(arr[cur] == 0){dest += 2;}else{dest ++;}if(dest>=arr.length-1){break;}cur++; }if(dest == arr.length){arr[dest-1] = 0;dest -= 2;cur --;}while(cur>=0){if(arr[cur] == 0){arr[dest--] = 0;arr[dest--] = 0;cur--;}else{arr[dest--] = arr[cur--];}}}
}

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

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

相关文章

Odoo:免费开源的医疗器械行业解决方案

开源智造Odoo专家团队深知&#xff0c;作为医疗器械制造商&#xff0c;您的成功取决于制造卓越产品的能力。您必须遵循严密控制的流程&#xff0c;开发和制造出达到最严格质量标准的产品。“开源智造Odoo医疗器械行业解决方案”是为医疗器械制造商设计的全球企业资源规划(ERP)软…

Redis键值对中值的数据结构

前言 前面我们已经介绍了Redis的键值对存储管理的底层数据结构。如果不清楚的同志可以看我前面的博客 Redis数据库存储键值对的底层原理-CSDN博客 下面,我们来看一下Redis键值对中值的数据结构有那些叭 Redis常见的5种数据类型 string …

MySQL自动化安装工具-mysqldeploy

功能 可在linux系统上安装 mysql5.5/5.6/5.7/8.0/8.4 版本的 MySQL&#xff0c;可以初始化多实例 MySQL。 码云: https://gitee.com/hh688/mysqldeploy guithub: https://github.com/hhkens/mysqldeploy 限制 仅在 centos7 环境进行测试&#xff0c;后期可能支持更多系统。 此程…

简要探讨大型语言模型(LLMs)的发展历史

关注大型语言模型(LLMs) 简要探讨语言模型的发展历史 理解Transformer架构的基本元素和注意力机制 了解不同类型的微调方法 语言模型的大小之分 在语言模型领域,“小”和“大”是相对概念。几年前还被视为“巨大”的模型,如今已被认为相当小。该领域发展迅猛,从参数规模为…

Java试题-选择题(2)

Java试题-选择题(2) 题目 下列语句创建对象的总个数是: String s=“a”+“b”+"c”+“d”+"e” A.4 B.2 C.3 D.1 关于下面的程序段的说法正确的是()? File file1=new File(“e:\xxx\yyy\zzz");file1.mkdir(); A.如目录e:\xxx\yyy\不存在,程序会抛出FileN…

揭秘动态测试:软件质量的实战防线

动态测试概述&#xff08;扩展版&#xff09; 目录 动态测试概述&#xff08;扩展版&#xff09; 一、动态测试的定义与重要性 ⚡ 二、动态测试类型 &#x1f50d; &#xff08;一&#xff09;功能测试 &#x1f9e9; &#xff08;二&#xff09;非功能测试 &#x1f4ca…

机器学习①【机器学习的定义以及核心思想、数据集:机器学习的“燃料”(组成和获取)】

文章目录先言一、什么是机器学习1.机器学习的定义以及核心思想2.机器学习的四大类型2.1监督学习&#xff08;Supervised Learning&#xff09;2.2半监督学习&#xff08;Midsupervised Learning&#xff09;2.3无监督学习&#xff08;Unsupervised Learning&#xff09;2.4强化…

GaussDB 数据库架构师(十二) 资源规划

1 硬件和软件要求 1&#xff09;硬件配置示例 硬件配置示例设备类型 设备型号 数量 备注 计算节点 CPU&#xff1a; 2*64 Cores&#xff0c;Kunpeng 920 内存&#xff1a;32*32GB 系统盘&#xff1a;2*960GB SATA SSD 数据盘&#xff1a;24*960GB SATA SSD RAID卡&#x…

Linux系统文件与目录内容检索(Day.2)

一、文件和目录内容检索处理命令1、uniq去重语法uniq [options] [input_file [output_file]]选项选项作用-c进行计数&#xff0c;并删除文件中重复出现的行-d仅显示连续的重复行-u仅显示出现一次的行-i忽略大小写案例1、删除输入文件中的重复行sort input.txt | uniq2、仅显示重…

如何选择一个容易被搜索引擎发现的域名?

在这个数字化时代&#xff0c;域名不仅是企业线上身份的标识&#xff0c;更是影响网站搜索曝光率的关键因素。一个精心挑选的域名能为品牌带来更多自然流量&#xff0c;下面我们就来探讨几个实用技巧。一、简洁易记是王道好域名首先要让人过目不忘。想象一下&#xff0c;当用户…

树形DP进阶:结合dfn序的线性化树问题求解技巧

树形DP进阶&#xff1a;结合dfn序的线性化树问题求解技巧一、dfn序与树的线性化1.1 dfn序的基本概念1.2 树形DP结合dfn序的优势二、核心应用&#xff1a;子树区间的DP优化2.1 子树权值和的快速查询与更新问题描述结合dfn序的解法代码实现&#xff08;前缀和版本&#xff09;优化…

九、Maven入门学习记录

Maven介绍Maven作用统一项目结构Maven安装&#xff08;注意配置阿里云私服时url要跟换成最新的&#xff09;IDEA创建Meavn项目Maven坐标介绍IDEA导入Maven项目依赖配置依赖传递依赖传递-排除依赖依赖范围生命周期生命周期-执行特定生命周期生命周期-总结

中标喜讯 | 安畅检测再下一城!斩获重庆供水调度测试项目

安畅检测在第三方检测领域持续深耕&#xff0c;再传捷报&#xff01;公司于2025年7月30日正式收到中标通知&#xff0c;成功拿下重庆水资源产业股份有限公司 “重庆西部科学城多水厂分区分压供水优化调度研究项目&#xff08;软件测试标段&#xff09;”。 此次中标不仅是市场…

银河麒麟V10一键安装DM8的脚本及高阶运维SQL分享

介质下载地址名称网址银河麒麟高级服务器操作系统V10&#xff08;SP3&#xff09;用户手册https://www.kylinos.cn/support/document/60.htmlDM8 安装手册https://eco.dameng.com/document/dm/zh-cn/pm/install-uninstall.htmlDM 数据库安装&#xff08;Linux安装&#xff09;h…

cobalt strike(CS)与Metasploit(MSF)联动

CS —> MSF首先cs上创建一个http的外部监听器。此时在CS服务端查看监听的ip&#xff0c;发现并没有开启&#xff0c;需要到成功移交会话后才会启动。netstat -tunlp | grep 7000在MSF中使用handler模块&#xff0c;配置监听。注意&#xff1a;目标机器的地址是rhost&#xf…

C# 类型

原文&#xff1a;C# 类型_w3cschool C#类型 类型定义值的蓝图。有不同的操作与不同类型相关联。 在下面的示例中&#xff0c;我们使用两个类型为int的常量&#xff0c;值为2 和 3。 static void Main() {int x 2 * 3;Console.WriteLine (x); } int 是一个表示整数值的构建…

确保TDesign Vue Next中t-color-picker组件在弹出颜色拾取面板时保证该面板不抖动方法参考

使用TDesign Vue Next中的组件t-color-picker时&#xff0c;在颜色面板弹出后&#xff0c;如果修改里面的颜色&#xff0c;发现这个颜色拾取面板会随着颜色的改变位置不断抖动&#xff0c;该问题由显示颜色的数值文本的长度变化引起&#xff0c;因此要覆盖组件内部颜色值文本的…

bypass

代码解析修改自身bypass&#xff1a;第一句话$s"Declaring file object\n";定义一个s&#xff0c;值为Declaring file object第二句话$d$_SERVER[DOCUMENT_ROOT].$_SERVER[DOCUMENT_URI]; 不知道$_SERVER是什么&#xff0c;那就打印出来看看。输入echo <pre>;…

C语言:构造类型学习

内容提要 构造类型 枚举类型typedef 综合案例&#xff1a;斗地主 构造类型 枚举类型 建议&#xff1a;如果定义不相干的常理&#xff0c;使用宏定义&#xff08;符号常量&#xff09;&#xff1b;如果需要定义一组相关联的常量&#xff0c;如月份0~11&#xff0c;星期0~6&#…

Prometheus-3--Prometheus是怎么抓取Java应用,Redis中间件,服务器环境的指标的?

1、Prometheus抓取Java应用的指标 1、数据来源&#xff1a;Java应用自身暴露的指标 Java应用的指标数据来源于应用代码中定义的指标对象&#xff08;如Counter、Gauge、Histogram等&#xff09;&#xff0c;通过Prometheus客户端库&#xff08;如io.prometheus:client_java&…