算法(三)—— 双指针

news2024/11/27 14:47:29

文章目录

  • 27 移除元素
  • 344 反转字符串(手写reverse)
  • 剑指 Offer 05 替换空格
  • 19 删除链表的倒数第N个节点
  • 面试题 02.07. 链表相交
  • 15 三数之和
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


27 移除元素

题目:原地移除数组中值为val的元素
思路:快慢指针
循环
{
每步都要做的:将fast的值给slow,同时slow++看,fast++
例外的:当fast指向val时,不赋值,只fast++
}
在这里插入图片描述

344 反转字符串(手写reverse)

原地反转字符串
思路:左右指针

void reverseString(vector<char>& s) {
        int left = 0;
        int right = s.size() - 1;
        while(right - left >= 1)
        {
            swap(s[left], s[right]);
            /*char temp = s[left];
            s[left] = s[right];
            s[right] = temp;*/
            right--;
            left++;
        }
}

剑指 Offer 05 替换空格

题目:原地将字符串的所有空格替换为 “%20”
思路:
1、首先扩充数组到每个空格替换成"%20"之后的大小。
2、然后从后向前替换空格,也就是双指针法:前后指针
在这里插入图片描述

19 删除链表的倒数第N个节点

删除倒数第n个节点
思路:前后指针
让front移动n步,然后让front和back同时移动,直到front指向链表末尾。删掉back所指向的节点就可以了。

该题使用虚拟头节点,为了通过输入只有一个节点链表

ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* dummyhead = new ListNode(999);   // 为了通过只有一个节点的链表
        dummyhead->next = head;
        ListNode* front = dummyhead;
        ListNode* back = dummyhead;
        while(front->next != nullptr){
            if(n > 0){
                front = front->next;
                n--;
            }else{
                front = front->next;
                back = back->next;
            }
        }
        back->next = back->next->next;
        return dummyhead->next;
}

面试题 02.07. 链表相交

双指针需要推导的题

使用哈希set吧

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        unordered_set<ListNode *> visited;
        ListNode *temp = headA;
        while (temp != nullptr) {
            visited.insert(temp);
            temp = temp->next;
        }
        temp = headB;
        while (temp != nullptr) {
            if (visited.count(temp)) {
                return temp;
            }
            temp = temp->next;
        }
        return nullptr;
}

15 三数之和

此题在算法——回溯1中也有展现,但是会超时
在这里插入图片描述

vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> result;
        sort(nums.begin(), nums.end());
        // 找出a + b + c = 0
        // a = nums[i], b = nums[left], c = nums[right]
        for (int i = 0; i < nums.size(); i++) {
            // 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了
            if (nums[i] > 0) {
                return result;
            }
            // 错误去重a方法,将会漏掉-1,-1,2 这种情况
            /*
            if (nums[i] == nums[i + 1]) {
                continue;
            }
            */
            // 正确去重a方法
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            int left = i + 1;
            int right = nums.size() - 1;
            while (right > left) {
                // 去重复逻辑如果放在这里,0,0,0 的情况,可能直接导致 right<=left 了,从而漏掉了 0,0,0 这种三元组
                /*
                while (right > left && nums[right] == nums[right - 1]) right--;
                while (right > left && nums[left] == nums[left + 1]) left++;
                */
                if (nums[i] + nums[left] + nums[right] > 0) right--;
                else if (nums[i] + nums[left] + nums[right] < 0) left++;
                else {
                    result.push_back(vector<int>{nums[i], nums[left], nums[right]});
                    // 去重逻辑应该放在找到一个三元组之后,对b 和 c去重
                    while (right > left && nums[right] == nums[right - 1]) right--;
                    while (right > left && nums[left] == nums[left + 1]) left++;

                    // 找到答案时,双指针同时收缩
                    right--;
                    left++;
                }
            }

        }
        return result;
}

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

Jetson Orin Nano nvme系统备份和恢复

大家好&#xff0c;我是虎哥&#xff0c;Jeston Orin nano 8G模块&#xff0c;我自己也玩了一段时间&#xff0c;配置了很多环境后&#xff0c;我就在琢磨如何将系统像之前的模块一样捞取出来后&#xff0c;在新模块上进行恢复。过程是曲折的&#xff0c;结果也是曲折的&#x…

开源字节 考研集训营小程序

考研集训营的价格要比普通的班课贵很多&#xff0c;价格通常在上万元。考研集训营分为春季、暑期、秋季等短期集训营&#xff0c;还有半年和全年长期集训&#xff0c;为学生提供英语、数学、政治的公共课辅导和各种专业课的教学。想要了解更多的考研相关信息&#xff0c;获得适…

自然语言处理从入门到应用——自然语言处理的基本问题:结构预测问题

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 与文本分类问题不同&#xff0c;在结构预测问题中&#xff0c;输出类别之间具有较强的相互关联性。例如&#xff0c;在词性标注任务中&#xff0c;一句话中不同词的词性之间往往相互影响&#xff0c;如副词之后往往出现…

1、mysql的安装与配置

下载安装配置 下载zip文件解压之后配置环境变量 在path后面添加mysql bin文件夹的路径&#xff1a;C:\Program Files (x86)\MySQL\bin 配置完环境变量后&#xff0c;在C:\Program Files (x86)\MySQL目录下新建一个配置文件mysql.ini&#xff0c;同时在bin的同级目录C:\Program …

算法的复杂度【数据结构】

1、时间复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源&#xff0c;因此衡量一个算法的好坏一般是从时间和空间两个维度来衡量的&#xff0c;即时间复杂度和空间复杂度时间复杂度主要衡量一个算法的运行快慢&#xff0c;而空间复杂度主要…

Jenkins安装配置

前言&#xff1a;Jenkins是一款CICD&#xff08;持续集成与持续交付&#xff09;工具。Jenkins可以帮你在写完代码后&#xff0c;一键完成开发过程中的一系列自动化部署的工作。 Jenkins 2.346.1 版本支持 jdk1.8 和 jdk11&#xff0c;最后一版支持jdk1.8的版本。 安装Jenkins前…

windows修改Pycharm的右键打开方式

title: windows中open floder as Pycharm太长了怎么修改 date: 2023-06-04 author: IoT_H2 tags: windows系统问题 categories: Markdown 问题描述&#xff1a; Pycharm这一栏这么长&#xff0c;长的我实在是很难受&#xff0c;事实上Jetbrains家的软件都是这个鸟模样 导…

RocketMq的单机版安装以及可视化软件的安装

一 RocketMq的单机版安装 1.1 RocketMq的上传 1.2 解压 [rootlocalhost export]# unzip rocketmq-all-4.9.6-bin-release.zip 1.3 修改配置 使用 vim 命令打开 bin/runserver.sh 文件。现将这些值修改为如下&#xff1a; [rootlocalhost bin]# vi runserver.sh 使用vim命令…

tinkerCAD入门操作(3):创建和操作分组对象

tinkerCAD入门操作(3)&#xff1a;创建和操作分组对象 介绍 我们现在将探索Tinkercad的超能力 - 组合简单的形状来制作复杂的对象。 组合形状是实体建模的基本目的。这就是汽车、建筑物和宇宙飞船等有趣东西的制作方式。现在&#xff0c;我们要教你这个超能力。 创建复合形状…

Stable-Diffusion|window10安装GPU版本的 Stable-Diffusion-WebUI遇到的一些问题(一)

教程主要参考&#xff1a; AI绘画第一步&#xff0c;安装Stable-Diffusion-WebUI全过程 ! Stable Diffusion WebUI使用手冊(正體中文)&#xff5c;Ivon的部落格 具体记录一下笔者除了按照上述教程&#xff0c;遇到坑的地方 文章目录 1 git PYTHON2 Nvidia设置3 stable-diffus…

如何解决构建安防监控系统的技术难点?快解析来助力

在安防领域,大数据具有广阔的应用场景,能带来深度的价值。随着应用普及越来越广&#xff0c;安防监控系统被人们日益重视起来&#xff0c;科技含量越来越高&#xff0c;几乎所有高新科技都可促进其发展&#xff0c;尤其是信息时代的来临&#xff0c;更给该专业的发展提供了契机…

2023年全球项目管理系统排行榜:推荐15家值得关注的项目管理系统

在当今世界&#xff0c;管理项目已经成为许多企业不可分割的一部分。因此&#xff0c;拥有正确的项目管理系统对于确保任何业务的成功都是至关重要的。随着技术的不断发展&#xff0c;好用的项目管理系统也在不断发展&#xff0c;以满足现代工作场所日益增长的需求。到2023年&a…

区间预测 | MATLAB实现基于QRCNN-BiGRU-Multihead-Attention多头注意力卷积双向门控循环单元多变量时间序列区间预测

区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积双向门控循环单元多变量时间序列区间预测 目录 区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积双向门控循环单元多变量时间序列区间预测效果一览基本介绍模型描述程序设计参考资…

设计模式之-模板方法模式C++实现与C++模板template使用

介绍 模板方法模式使用比较常见&#xff0c;也比较简单&#xff0c;模板方法模式是属于设计模式中的行为设计模式。行为设计模式是关注对象的行为或者交互方面的内容&#xff0c;主要涉及算法和对象之间的职责分配。 模板方法模式使用场景&#xff1a;在设计需求中&#xff0c;…

超详细IDEA创建MavenWeb项目

文章目录 一、环境准备二、骨架方式创建Maven-Web项目三、非骨架方式创建Maven-Web项目 一、环境准备 既然是创建Maven-Web项目&#xff0c;那么首先我们需要配置好Maven和JDK环境&#xff0c;这里笔者使用JDK8版本以及Maven3.6系列版本。 附Maven安装配置教程 超详细Maven安装…

【CesiumJS入门】(2)ImageryLayer之图层加载与管理

前言 在上一篇博客中&#xff0c;我们加载了一个空空的蓝色地球&#xff0c;现在我们将会为地球加载上地图。 步骤&#xff1a; 创建ImageryProvider &#xff08;数据源&#xff09;创建ImageryLayer &#xff08;图层&#xff09;将图层添加进视图中&#xff08;viewer&…

ChatGPT中文版写论文神器使用技巧

又到了一年一度的毕业季&#xff0c;写论文成了同学们的头等大事。ChatGPT系当今世上最强的人工智能产品&#xff0c;已经深刻地影响着人们的工作生活学习。ChatGPT也是写论文的神器&#xff0c;能帮助同学们拓宽思路&#xff0c;举一反三&#xff0c;事半功倍。以面给同学们盘…

六、JSP06 使用 EL 和 JSTL 简化 JSP

六、使用 EL 和 JSTL 简化 JSP 6.1 使用 EL 表达式 EL 表达式借鉴了 JavaScript 和 XPath 的表达式语言 EL 表达式提供了一种在 JSP 中简化表达式的方法 EL 表达式通常用于在某个作用域 {page、request、session、application等} 内取得属性值 6.1.1 使用 EL 表达式 EL 表达式…

【019】C++的指针与函数

C的指针与函数 引言一、指针变量作为函数的参数1.1、单向传递&#xff1a;值传递1.2、单向传递&#xff1a;传地址 二、数组作为函数的参数传递三、函数的返回值类型是指针类型四、函数指针4.1、函数指针的定义4.2、函数指针变量的注意事项4.3、函数指针变量使用typedef定义别名…

rabbitmq死信队列详解

目录 1 概念 2 成为死信队列的条件 2.1 队列指定长度 2.2 消息ttl时间 2.3 消费者拒收消息 1 概念 死信队列&#xff1a;死信队列其实和普通的队列一样&#xff0c;只不过里面存放的消息都是普通队列过期没有消费的。所以&#xff0c;接收没有及时被消费消息的队列为死信…