【算法挨揍日记】day01——双指针算法_移动零、 复写零

 283.移动零 

283. 移动零icon-default.png?t=N6B9https://leetcode.cn/problems/move-zeroes/

题目:

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

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

 

 解题思路:

我们可以利用两个指针(dest和cur)的方法,将这个数组分为三个区域

我们可以将dest初始化为-1,cur初始化为0

 cur走一遍数组遇到的两种情况:

  • cur位置为0
  • cur位置为非0

当cur位置为0,cur++;

当cur不为0时,swap交换一下就好,dest++;

解题代码:

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

1089. 复写零

1089. 复写零icon-default.png?t=N6B9https://leetcode.cn/problems/duplicate-zeros/

 题目:

给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。

 解题思路:

 本题要求我们要就地修改,不能使用额外的数组,我们先用额外的数组想一想

我们发现结果是这样的

 我们再将使用额外数组的双指针方法用在本地去实验一下,我们发现dest=-1和cur=0,去正向解决问题不可以,会有元素被覆盖丢失的问题!

我们试着反向去操作呢,dest=size-1(指向最后一个元素),那我们如何确定cur的位置呢?

我们可以再利用一次双指针的方法来确认cur的位置,一开始cur=0,dest=-1

遍历数组,当cur遇到0时,dest+=2;当cur遇到非0时,cur++;

这里会有一种边界情况需要我们去考虑:

示例:1 0 2 3 0

我们通过上述方式来确定cur时,会出现以下这种情况:

会出现dest越界的情况,我们考科一让size-1的位置置为0,然后cur--,dest-=2这样就可以解决问题了

然后从后向前遇到0就是置两次0,遇到非0就是复制咯,这一步简单

 

 解题代码:

class Solution {
public:void duplicateZeros(vector<int>& arr) {int dest=-1;int cur=0;int size=arr.size();//确认cur的位置while(cur<size){if(arr[cur]==0)dest+=2;else dest++;if(dest>=size-1)break;cur++;}//边界情况,示例:1 0 2 3 0,当dest的位置越界了if(dest==size){arr[size-1]=0;dest-=2;cur--;}while(cur>=0){if(arr[cur]!=0){arr[dest--]=arr[cur--];}else {arr[dest--]=0;arr[dest--]=0;cur--;}}}
};

 

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

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

相关文章

生信豆芽菜-火山图绘制使用说明

网站&#xff1a;http://www.sxdyc.com/visualsVolcano 一、火山图简介 火山图是散点图的一种&#xff0c;它将统计测试中的统计显著性量度&#xff08;如p value&#xff09;和变化幅度&#xff08;logFC&#xff09;相结合&#xff0c;能够快速直观地识别那些变化幅度较大且具…

13个Python最佳编程技巧,越早知道越好

每天我们都会面临许多需要高级编码的编程挑战。你不能用简单的 Python 基本语法来解决这些问题。在本文中&#xff0c;我将分享 13 个高级 Python 脚本&#xff0c;它们可以成为你项目中的便捷工具。如果你目前还用不到这些脚本&#xff0c;你可以先添加收藏&#xff0c;以备留…

springMVC 程序开发

目录 一. 认识 springMVC spring&#xff0c;springBoot&#xff0c;springMVC的关系 二. springMVC 的连接和获取参数 1. 注解分析&#xff08;不带参数&#xff09; 2. 获取参数 3. 获取对象参数 4. 重命名功能 5. 获取 JSON 对象 6. 通过 path 文件路径来传递参数…

新版Android Studio模拟器浮动

&#xff08;水一篇&#xff0c;但其实很多入门同学不知道&#xff09; 安装新版Andorid Studio后会发现模拟器是内嵌在AS中的&#xff0c;如何让她浮动

[C++项目] Boost文档 站内搜索引擎(4): 搜索的相关接口的实现、线程安全的单例index接口、cppjieba分词库的使用、综合调试...

有关Boost文档搜索引擎的项目的前三篇文章, 已经分别介绍分析了: 项目背景: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: &#x1fae6;[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…

C++学习| MFC简单入门

前言&#xff1a;因为接手了CMFC的程序&#xff0c;所以需要对MFC编程方面有所了解。 C之MFC简单入门 MFC相关的概念MFCWIN32QT MFC项目基本操作MFC项目创建MFC项目文件解读界面和代码数据交互——加法器 MFC相关的概念 MFC MFC&#xff08;Microsoft Foundation Classes微软…

MySQL中基础查询语句

用户表user数据如下&#xff1a; iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543famale20北京大学Deijing42315female 23 浙江大学ZheJiang55432male25山东大学Shandong 1&#xff0c;写出ddl语句创建如上表&#xff0c;…

CEC2013(MATLAB):淘金优化算法GRO求解CEC2013的28个函数

一、淘金优化算法GRO 淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;由Kamran Zolf于2023年提出&#xff0c;其灵感来自淘金热&#xff0c;模拟淘金者进行黄金勘探行为。淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;提…

centos7实现负载均衡

目录 一、基于 CentOS 7 构建 LVS-DR 集群。 1.1 配置lvs负载均衡服务 1.1.1 下载ipvsadm 1.1.2 增加vip 1.1.3 配置ipvsadm 1.2 配置rs1 1.2.1 编写测试页面 1.2.2 手工在RS端绑定VIP、添加路由 1.2.3 抑制arp响应 1.3 配置rs2 1.4 测试 二、配置nginx负载…

AMEYA360:尼得科科宝旋转型DIP开关系列汇总

旋转型DIP开关 S-4000 电路&#xff1a;BCD(十进制) 代码格式&#xff1a;实码 安装类型&#xff1a;表面贴装 调整位置&#xff1a;顶部 可水洗&#xff1a;无 端子类型&#xff1a;J 引线, 鸥翼型 旋转型DIP开关 SA-7000 电路&#xff1a;BCD(十进制), BCH(十六进制) 代码格式…

Java线程池

线程池 1. 概念2. 工作流程3. ThreadPoolExecutor参数 1. 概念 线程池是一种利用池化技术思想来实现的线程管理技术&#xff0c;主要是为了复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。我们可以创建线程池来复用已经创建的线程来降低频繁创建和销毁…

Detector定位算法在FPGA中的实现——section1 原理推导

关于算法在FPGA中的实现&#xff0c;本次利用业余的时间推出一个系列章节&#xff0c;专门记录从算法的推导、Matlab的实现、FPGA的移植开发与仿真做一次完整的FPGA算法开发&#xff0c;在此做一下相关的记录和总结&#xff0c;做到温故知新。 这里以Detector在Global Coordina…

Ansible从入门到精通【六】

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 专栏名称&#xff1a;Ansible从入门到精通 立志成为ansible大佬 ansible templates 模板&#xff08;templa…

利用状态监测和机器学习提高冷却塔性能的具体方法

在现代工业生产中&#xff0c;冷却塔扮演着至关重要的角色&#xff0c;它们的性能直接影响着工艺流程的稳定性和效率。为了确保冷却塔的正常运行和减少系统故障&#xff0c;状态监测和机器学习成为了关键技术。 图.冷却塔&#xff08;PreMaint&#xff09; 在前文《基于人工智…

MySQL_约束、多表关系

约束 概念&#xff1a;就是用来作用表中字段的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确性&#xff0c;有效性和完整性。 约束演示 #定义一个学生表&#xff0c;表中要求如下&#xff1a; #sn 表示学生学号&#xff0c;要求使用 …

Python测试框架pytest:常用参数、查找子集、参数化、跳过

Pytest是一个基于python的测试框架&#xff0c;用于编写和执行测试代码。pytest主要用于API测试&#xff0c;可以编写代码来测试API、数据库、UI等。 pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要有以下几个优点&#xff1a; 简单灵活&#xff0c;容易上手。…

【input】关于input 元素的type类型及相关作用

传统类型&#xff1a; text&#xff1a;用于输入单行文本。 <input type"text" name"username">password&#xff1a;用于输入密码&#xff0c;输入的内容会被隐藏。 <input type"password" name"password">checkbox&a…

React Native 样式布局基础知识

通过此篇笔记能够学习到如下的几个知识点 在 React Native 中使用样式的一些细节了解 React Native 的 Flex 布局概念了解 React Native 的 flex 布局属性React Native 如何添加多样式属性React Native 中绝对布局和相对布局 React Native 中的 Flex 布局概念 1、主轴和交叉…

树莓派命令行运行调用音频文件的函数,不报错,没有声音解决办法

树莓派接上音频首先需要切换音频不是HDMI&#xff0c;然后可以双击运行wav文件可以播放&#xff0c;但是&#xff1a; 命令行直接运行wav文件报错&#xff1a; Playing WAVE twzc.wav : Signed 16 bit Little Endian, Rate 16000 Hz, Mono命令行运行main方法也是无法播放&am…