优选算法之技巧(一):双指针一:移位0与复写0

引用:我们之前学过快排,首先用三元取中,找(key),然后就用到了双指针的方法来进行交换排序,那我们今天要讲的双指针其实大同小异,无非在数组中就变成了下标。

题一:

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

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

题一思路:

    current起到遍历作用,从左向右,起始位置在第一个元素,即下标0;

    desteration是指最后一个非0元素,起始位置在第一个元素前一个,即下表-1;

    当current当前是非0元素,即desteration++,然后让current与desteration所指向的原素进行交换,current++

   当current当前是0元素,即current++;

 当current遍历完,则结束循环,输出结果!

  思路图如下:

题一思路代码:

class Solution {

public:

    void moveZeroes(vector<int>& nums) {

       int current=0;

       int desteration=-1;

       int size=nums.size();

       while(current!=size)

       {

          if(nums[current]!=0)

          {

            desteration++;

            swap(nums[current],nums[desteration]);

            current++;

          }

          else

          {

            current++;

          }

       }

    }

};


题二:

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

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

题二思路:

     我们如果从前往后进行操作的话,会出现desteration在current之后,所以我们要从后往前操作,故我们要找出最后一个current的位置,desteration为最后一个位置刚好为最后一个元素。

但是如果最后一个current指向的元素为0,那desteration会超出数组范围,也就是越界。

故这作为一种特殊情况处理。如图:

常规:

一,找最后一个current步骤:1,判断当前current的值。2,让desteration进行向后移动一步或二步。3,判断desteration是否到最后。4,current++;

(特殊情况)n-1=0,current--,desteration-=2;

二,进行逆“复写”。

题二思路代码:

class Solution {

public:

    void duplicateZeros(vector<int>& arr) {

          int desteration=-1;

          int current=0;

          while(current<arr.size())

          {

            if(arr[current]!=0)

            {

                desteration++;

            }

            else{

                desteration+=2;

            }

            if(desteration>=arr.size()-1)

            {

                break;

            }

            current++;

          }

          if(desteration==arr.size())

          {

            current--;

            arr[arr.size()-1]=0;

            desteration-=2;

          }

          //逆复写

          while(current>=0)

          {

            if(arr[current]!=0)

            {

                arr[desteration--]=arr[current--];

            }

            else{

                arr[desteration--]=0;

                arr[desteration--]=0;

                current--;

            }

          }

    }

};

让我们相遇在下一篇算法讲解!

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

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

相关文章

LDR6020-VR串流线:开启虚拟现实新纪元的钥匙

随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经从科幻概念逐渐走进我们的生活&#xff0c;成为娱乐、教育、医疗等多个领域的热门话题。而VR串流线&#xff0c;作为这一技术的重要组成部分&#xff0c;正逐步成为连接用户与高质量VR体验的关键桥梁…

pip的常用命令和常见问题的解决

常用命令 安装包&#xff1a;pip install package_name 例子&#xff1a;pip install requests 指定版本安装包&#xff1a;pip install package_nameversion_number 例子&#xff1a;pip install numpy1.19.4 升级包&#xff1a;pip install --upgrade package_name 例子&am…

移动硬盘坏道深度解析与应对全攻略

一、现象解读&#xff1a;移动硬盘坏道的直观展示 在数字化信息爆炸的今天&#xff0c;移动硬盘作为便捷的数据存储与传输工具&#xff0c;其重要性不言而喻。然而&#xff0c;随着使用时间的推移&#xff0c;不少用户遭遇了移动硬盘出现“坏道”的困扰。坏道&#xff0c;作为…

Python中如何使用列表或其他数据结构实现栈和队列

在Python中&#xff0c;可以使用列表&#xff08;List&#xff09;数据结构来方便地实现栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;这两种重要的数据结构。栈和队列都是基于先进后出&#xff08;FILO, First In Last Out&#xff09;和先进先出&…

Spring与Quartz整合

Quartz框架是一个轻量级的任务调度框架&#xff0c;它提供了许多内置的功能&#xff0c;包括&#xff1a;支持作业的调度、集群调度、持久化、任务持久化、任务依赖、优先级、并发控制、失败重试等。同时也支持自定义作业类型和触发器类型。与Spring整合步骤如下&#xff1a; …

SQL跨数据库服务器查询和跨表批量插入的操作

MSSQL实现跨服务器查询数据库 EXEC sp_addlinkedserver server192.168.1.10, --链接服务器别名 srvproduct, providerSQLOLEDB, datasrc192.168.1.10 --要访问的的数据库所在的服务器的ip GO EXEC sp_addlinkedsrvlogin 192.168.1.10, --链接服务器别名…

scp命令快速上手用法

作用 scp命令可以实现linux和linux&#xff0c;linux和windows之间文件互传 操作 实验准备 windows系统 ip&#xff1a;192.168.172.1 linux系统A ip&#xff1a;192.168.172.181 linux系统B ip&#xff1a;192.168.172.181 实验1&#xff1a;linux系统A推送文件到linxu…

elasticsearch用curl查询

curl:-X :指定http的请求方式&#xff0c;有HEAD、GET、POST、PUT、DELETE-d :指定要传输的数据-H :指定http的请求头信息 curl -XPUT http://ip:port/索引名?pretty-- 创建索引 curl -XGET http://ip:port/_cat/indices?v --查看当前es的所有索引信息 curl -XGET http://ip:…

基于springboot+vue+uniapp的贵工程寝室快修小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

哈喽GPT-4o,程序员如何通过GPT-4o提高工作效率

目录 一、编写代码Prompt&#xff1a;请用Java语言编写一个二分查找的样例 二、修正代码错误、代码优化Prompt&#xff1a;我们上传一张华为OD算法题的题目描述&#xff0c;再给它我的Java解题代码&#xff0c;问问它有什么问题&#xff1f; 三、解读代码功能、代码翻译Prompt&…

在Windows环境下安装Python 3.11的步骤

在Windows环境下安装Python 3.11的步骤相对直接。下面是详细的安装教程&#xff1a; 第一步&#xff1a;下载Python 3.11安装程序 访问Python官方网站的下载页面&#xff1a;https://www.python.org/downloads/在页面中找到适用于Windows的Python 3.11版本&#xff0c;点击下…

Java中的匿名类

匿名类简介 匿名类&#xff08;Anonymous Classes&#xff09;是在 Java 中定义的一种没有名字的内部类。它们通常用来简化代码编写&#xff0c;尤其是在需要创建简短的类实现接口或继承类的场景中。匿名类可以在方法、构造方法、字段初始化时使用。 匿名类的特性 没有类名&a…

【面试题】MySQL(第一篇)

1. MySQL是什么&#xff1f; MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用结构化查询语言&#xff08;SQL&#xff09;进行数据管理。MySQL具有高性能、可靠性、可扩展性和兼容性等特点&#xff0c;广泛应用于Web应用开发中。 2. …

数据分析入门指南Excel篇:各类Excel函数概览与详解(二)

在当今数字化时代&#xff0c;数据已成为推动业务决策和创新的关键因素。而表格结构数据&#xff0c;作为最常见的数据存储形式之一&#xff0c;广泛应用于财务、物流、电商等多个领域。本文将基于提供的材料文本&#xff0c;深入探讨表格数据的处理与分析&#xff0c;特别是通…

华为 eNSP 路由器 实现双wan出口 访问外网nat 策略路由配置

1 实验拓扑 2 路由器配置 #R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysn [Huawei]sysname R1 [R1]int GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0 [R1-GigabitEthernet0/0/0]qu [R1…

基于STM32设计的智能台灯(HC05蓝牙控制)179

基于STM32设计的智能台灯(HC05蓝牙控制)(179) 文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】整体构架1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】项目背景1.4 开发…

详解Linux的shell脚本基础指令

一、shell简介 是Linux系统的用户界面&#xff0c;它提供用户与内核的一种交互方式。它接收用户输入的命令&#xff0c;并把它送入内核去执行&#xff0c;是一个命令解释器。 脚本&#xff1a;本质是一个文件&#xff0c;文件里面存放的是 特定格式的指令&#xff0c;系统可以…

如何选择快手矩阵源码:关键因素解析

在短视频行业迅速发展的今天&#xff0c;快手平台已成为众多内容创作者和企业的重要阵地。为了有效管理和运营多个快手账号&#xff0c;快手矩阵源码成为了一个关键工具。然而&#xff0c;市场上的快手矩阵源码种类繁多&#xff0c;选择一个合适的源码并非易事。本文将探讨选择…

【每日一练】python基础入门实例

""" 幼儿园加法练习题 题数不限 每满100分奖励10个棒棒糖 要求&#xff1a; 1.使用三目运算符与基础运算的对比 2.随机数字相加 3.调用函数 4.循环执行练习题 5.有计算分数 6.有时间停止休眠 """ #导入随机模块 import random #导入时间模块 imp…

聚观早报 | 蚁天鉴2.0发布;理想汽车推送无图NOA

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 7月8日消息 蚁天鉴2.0发布 理想汽车推送无图NOA 特斯拉推送FSD v12.4.3 iQOO Neo9s Pro配色公布 百川智能AI健康…