24届秋招专场 · 数组如何用双指针解题呢?

news2024/11/23 23:17:47

在这里插入图片描述

你好,我是安然无虞。

文章目录

  • 删除有序数组中的重复项
  • 删除排序链表中的重复元素
  • 移除元素
  • 移除零

大家好,近期主要更新数组相关的解题算法咯,感兴趣的老铁可以一起看过来啦。

在这里插入图片描述
今天更新使用双指针解决数组部分题型,注意哦,这里所说的双指针不是C语言中“指针”的概念,指的是数组的索引下标,不要混淆咯。

话不多说,开始刷题!

删除有序数组中的重复项

题目链接:删除有序数组中的重复项
题目描述:在这里插入图片描述
在这里插入图片描述
解题思路:

  • 定义快慢指针,slow走在后面,fast走在前面探路
  • fast找到不重复的元素就赋值给slow,并且slow++
  • PS:赋值和slow++的先后顺序请画图理解

代码详解:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) 
    {
        // 定义快慢指针,slow走在后面,fast走在前面探路
        // fast找到不重复的元素就赋值给slow,并且slow++
        // 需要注意赋值和slow++的先后顺序,需要画图去理解
        int slow = 0, fast = 0;

        while(fast < nums.size())
        {
            if(nums[slow] != nums[fast])
            {
                slow++; // slow++在先,后赋值
                nums[slow] = nums[fast];
            }

            fast++;
        }

        // 光看没用,请画图理解
        return slow + 1;
    }
};

理解了上面的数组题型,下面的链表就不难理解啦,只需要注意这里指针的指向即可。

删除排序链表中的重复元素

题目链接:删除排序链表中的重复元素
题目描述:
在这里插入图片描述
解题思路:

仿照上面的解题思路即可,最后需要注意断开与后面重复元素的连接。

代码详解:

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) 
    {
        if(head == nullptr)
            return nullptr;

        // 定义快慢指针
        ListNode* slow = head, *fast = head;

        while(fast != nullptr)
        {
            if(slow->val != fast->val)
            {
                slow->next = fast;
                slow = slow->next;
            }

            fast = fast->next;
        }

        // 注意需要断开与后面重复元素的连接
        slow->next = nullptr;

        return head;
    }
};

移除元素

题目链接:移除元素
题目描述:
在这里插入图片描述
解题思路:

定义快慢指针,fast遇到值不为val的元素就赋值给slow,并且slow++,请注意赋值和slow++的先后顺序,需要画图理解。

代码详解:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) 
    {
        // 定义快慢指针
        // 如果fast遇到值不为val的元素则赋值给slow,并且slow++
        // 还是需要注意赋值和slow++的先后顺序,请画图理解
        int slow = 0, fast = 0;

        while(fast < nums.size())
        {
            if(nums[fast] != val)
            {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }

        return slow;
    }
};

移除零

题目链接:移除零
题目描述:
在这里插入图片描述
解题思路:

  • 根据 移除元素 思路,将0全部移除,此时数组前面的元素都是非0数
  • 然后再将[p, nums.size()-1]全部置为0即可

代码详解:

class Solution {
public:
    void moveZeroes(vector<int>& nums) 
    {
        // 根据 移除元素 思路,将0全部移除
        // 然后再将[p, nums.size()-1]全部置为0即可
        int p = removeElement(nums, 0);

        for(int i = p; i < nums.size(); i++)
        {
            nums[i] = 0;
        }
    }

    // 移除元素
    int removeElement(vector<int>& nums, int val)
    {
        int slow = 0, fast = 0;

        while(fast < nums.size())
        {
            if(nums[fast] != val)
            {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }

        return slow;
    }
};

种一棵树最好的时间是十年前, 其次是现在.
一起加油, 下篇博客再会.

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

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

相关文章

支付宝小程序云亮相!向小程序生态开放全面云服务

前言&#xff1a; 小程序是一种轻量级应用程序&#xff0c;不需要安装即可直接在手机上使用。相较于传统的APP来讲&#xff0c;其无需下载安装&#xff0c;轻便快捷&#xff0c;快速启动&#xff0c;易于推广的良好特性为我们所青睐。 为此&#xff0c;支付宝小程序云&#xff…

DataX在有赞大数据平台的实践

文章目录 一、需求二、选型三、前期设计3.1 运行形态3.2 执行器设计3.3 开发策略 四、Datax-Web五、总结 大家好&#xff0c;我是脚丫先生 (o^^o) 在看技术文章的时候&#xff0c;发现有赞平台采用过Datax。想到指北数据中台&#xff0c;数据汇聚采用的是Datax-web二次开发&am…

chatgpt赋能python:Python的字符串索引操作技巧

Python的字符串索引操作技巧 Python是一个强大而灵活的编程语言&#xff0c;被广泛用于各种领域。在Python中&#xff0c;字符串是一个非常重要的数据类型&#xff0c;它可以包含文本、数字、符号和其他任何字符。在处理字符串时&#xff0c;索引操作是常见的操作之一。本文将…

计算机网络之网络层:数据平面

四.网络层&#xff1a;数据平面 4.1 网络层概述 网络层被分解为两个相互作用的部分&#xff0c;即数据平面和控制平面。 数据平面决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一&#xff0c;转发方式有&#xff1a; 传统的IP转发&#xff1a;转发基于…

【算法与数据结构】707、LeetCode设计链表

文章目录 一、题目二、设计链表三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、设计链表 思路分析&#xff1a;这里我将的成员函数放在类外实现了&#xff0c;这样链表类看起来更加简洁&#xff0c;方便大家…

jenkins用户权限管理

环境准备: 登录jenkins: http://192.168.9.190:8091/ admin asdwhl@0 一、用户权限插件安装 1、Dashboard > Manage Jenkins > Manage Plugins > Available(可选插件) 依次安装: Role-based Authorization Strategy Authorize Project

校园二手交易平台实训报告

目 录 一、设计背景 1. 需求分析 2. 课题研究的目的和意义 二、系统需求分析与开发环境 1. 系统功能需求 2. 系统界面需求 3. 开发环境 三、系统设计 四、系统测试 1. 脑模拟器测试 五、总结与展望 六、重要程序 1. LoginActivity 2. RegisterActiv…

51Proteus仿真数控0~20mA恒流源串口DAC0832数码管显示-0036

51Proteus仿真数控0~20mA恒流源串口DAC0832数码管显示-0036 Proteus仿真小实验&#xff1a; 51Proteus仿真数控0~20mA恒流源串口DAC0832数码管显示-0036 功能&#xff1a; 硬件组成&#xff1a;AT89C51单片机 6位数码管DAC0832电压输出多个按键&#xff08;设置、移动、加、…

INTERSPEECH 2023论文|基于多频带时频注意力的复调音乐旋律提取

论文题目&#xff1a; MTANet: Multi-band Time-frequency Attention Network for Singing Melody Extraction from Polyphonic Music 作者列表&#xff1a; 高虞安&#xff0c;胡英&#xff0c;王柳淞&#xff0c;黄浩&#xff0c;何亮 研究背景 复调音乐是一种具有多个声…

[PyTorch][chapter 41][卷积网络实战-LeNet5]

前言 这里结合前面学过的LeNet5 模型&#xff0c;总结一下卷积网络搭建&#xff0c;训练的整个流程 目录&#xff1a; 1&#xff1a; LeNet-5 2: 卷积网络总体流程 3&#xff1a; 代码 一 LeNet-5 LeNet-5是一个经典的深度卷积神经网络&#xff0c;由Yann LeCun在1998年提…

zabbix-agent安装

1.CentOS release 5 1-1.centos5 32位 [rootLV zabbix]# cat /etc/redhat-release CentOS release 5 (Final) [rootLV zabbix]# uname -a Linux LV 2.6.18-53.el5xen #1 SMP Mon Nov 12 03:26:12 EST 2007 i686 i686 i386 GNU/Linux确定了系统centos5 32位rpm方式安装&#…

Ubuntu18.04离线安装redis

因需要安装redis的服务器无法连接互联网&#xff0c;所以需要离线安装。首先需要下载redis的安装包&#xff0c;之后进行安装&#xff0c;在安装之前需要保证gcc&#xff0c;g&#xff0c;make等依赖包已经安装。 1. 安装gcc等依赖包 依赖包安装请参考&#xff1a; Ubuntu18…

CI570 3BSE001440R1需要电流显示和就地/远传控制

​ CI570 3BSE001440R1需要电流显示和就地/远传控制 CI570 3BSE001440R1需要电流显示和就地/远传控制 如果变频器与通讯方式与DCS系统连接&#xff0c;则只需要计算1个通讯点&#xff0c;不需要计算其他点数。 &#xff08;6&#xff09;如DCS系统外接电磁阀、指示灯、接触器等…

物联网云平台数据存储方案,这次我终于找对了

《高并发系统实战派》-- 你值得拥有 文章目录 物联网云平台存储概述为什么要做存储&#xff1f;存储的意义在哪里&#xff1f;数据存储方案设计存储数据库选型需要考虑的因素数据库选型结构化数据半结构化数据非结构化数据 案例分析第一颗栗子第二颗栗子第三颗栗子第四颗栗子 …

Web安全:vulhub 靶场搭建.(各种漏洞环境集合,一键搭建漏洞测试靶场)

Web安全&#xff1a;vulhub 靶场搭建. Vulhub是一个面向大众的开源漏洞靶场&#xff0c;无需docker知识&#xff0c;简单执行两条命令即可编译、运行一个完整的漏洞靶场镜像。让漏洞复现变得更加简单&#xff0c;让安全研究者更加专注于漏洞原理本身. 目录&#xff1a; Web安…

DLL修复工具下载,解决DLL文件问题的方法

在计算机应用程序中&#xff0c;我们经常会遇到一些错误提示&#xff0c;如“找不到.dll文件”或“无法加载.dll文件”。这些问题通常是由于缺少或损坏的DLL文件造成的。为了解决这些问题&#xff0c;我们可以借助DLL修复工具来修复和恢复DLL文件。本文将介绍什么是DLL文件&…

C# 自动更新(基于FTP)

效果 启动软件后&#xff0c;会自动读取所有的 FTP 服务器文件&#xff0c;然后读取本地需要更新的目录&#xff0c;进行匹配&#xff0c;将 FTP 服务器的文件同步到本地 Winform 界面 一、前言 在去年&#xff0c;我写了一个 C# 版本的自动更新&#xff0c;这个是根据配置文…

黑盒、白盒、灰盒,如何选择合适的模糊测试工具?

在软件开发和安全领域&#xff0c;模糊测试是一种常用技术&#xff0c;用于发现应用程序或系统中的潜在漏洞和安全弱点。选择不同的模糊测试方法将极大地影响测试的有效性和效率。本文将比较对比黑盒、白盒和灰盒模糊测试的特点和优势并提供选型指导。 模糊测试的分类 黑盒模糊…

人工智能带来的利好将继续推动Palantir股价反弹

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 Palantir的人工智能产品已经获得行业认可 Palantir&#xff08;PLTR&#xff09;成立于2003年&#xff0c;是一家专注于数据分析和人工智能的知名软件公司。其尖端产品已应用到了政府机构、企业和非营利组织等各个行业&…

华为OD机试 Java 实现【输出单向链表中倒数第k个结点】【LeetCode练习题】,附详细解题思路

一、题目描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。 链表结点定义如下: class ListNode{int value;ListNode next;public ListNode(){}public ListNode(