剑指offer刷题记录Day 1 03.数组中重复的数字 ---> 06.从尾到头打印链表

news2024/9/24 17:42:06

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪)
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

        • 0、关于核心代码模式该怎么刷题?
        • 1、数组中重复的数字
          • ①代码实现(带注释)
          • ②补充说明(unordered_set)
        • 2、替换空格
          • ①代码实现(带注释)
        • 3、从尾到头打印链表
          • ①代码实现(带注释)
          • ②补充说明(vector)

0、关于核心代码模式该怎么刷题?

使用核心代码模式,不需要你直接编写main函数。一般题目设计者或测试平台已经为你写好了main函数或相应的测试框架。你需要做的是实现指定的功能函数(例如下面例子中是duplicate函数),按照题目要求返回正确的结果即可。测试平台会调用你实现的函数并传递测试用例作为参数,然后根据你的函数返回结果来评判你的代码是否正确。

省流:只需要实现对应题目要求的功能函数(需考虑数据结构和算法设计方面的使用),返回正确结果即可。

1、数组中重复的数字

原题链接:03.数组中重复的数字

在这里插入图片描述

①代码实现(带注释)
//Code_流苏(CSDN)
#include <unordered_set> // 引入unordered_set容器,基于哈希表实现
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param numbers int整型vector 
     * @return int整型
     */

	//核心代码如下:
    int duplicate(vector<int>& numbers) {
        //创建一个unordered_set用于存储已经遍历过的数字
        unordered_set<int> seen;

        //遍历所输入的数组
        for (int num : numbers) {
            //如果当前数字已经在seen集合中,表示找到了重复的数字。
            if(seen.find(num)!=seen.end()){
                //找到了,那么根据题目的要求返回数字即可
                return num;
            }
            //若没找到,将其加入到seen集合里
            seen.insert(num);
        }
        //若经过上面的for循环遍历没有找到重复的数字,按题目要求输出-1
        return -1;
    }
    
};

在这里插入图片描述

②补充说明(unordered_set)

unordered_set是C++标准库中的一个容器,它基于哈希表实现。它可以存储唯一的元素(即不允许有重复的元素),并且提供了高效的元素查找、插入和删除操作。unordered_set的优点:

  • 快速查找:可以在常数时间内查找元素是否存在于集合中。
  • 自动去重:由于unordered_set只存储唯一元素,它自动帮助我们去除重复的元素,这在很多场景下是非常有用的。
  • 简化代码:使用unordered_set可以让代码更简洁,因为它提供了一些方便的方法来处理集合操作,无需手动实现这些操作。

因此,在解决这类涉及查找重复元素的问题时,可以考虑使用unordered_set来解决。

2、替换空格

原题链接:05.替换空格

在这里插入图片描述

①代码实现(带注释)
//Code_流苏(CSDN)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    string replaceSpace(string s) {
        //定义一个result结果字符串,用于最后返回新的字符串
        string result;
        //遍历字符串s
        for (char c:s) {
            //若s字符串中的c为空格,则将对应的result字符串中添加"%20,即将空格替换成了"%20"
            if(c==' '){
                result += "%20";
            }else{
            //若不是空格,则将当前的字符c,直接添加到result字符串里    
                result += c;
            }
        }
        //经过上述遍历期间的if判断,成功将字符串替换成了题目要求的样式,此时我们return返回它即可
        return result;
    }
};

在这里插入图片描述

3、从尾到头打印链表

原题链接:06.从尾到头打印链表

在这里插入图片描述

①代码实现(带注释)
//Code_流苏(CSDN)
#include <vector>
/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        //创建一个tempStack临时栈,暂存链表元素
        stack<int> tempStack;
        //创建一个向量容器result,用于存放最终的结果
        vector<int> result;


        //使用currentNode当前节点指针遍历链表
        ListNode* currentNode = head;

        //利用栈"后进先出"的特性来求解本题
        //1.入栈
        //若当前节点非空,遍历链表,直到节点为空处为止
        while (currentNode != NULL) {
            //将当前节点的值压入临时栈tempStack里
            tempStack.push(currentNode->val);
            //将当前节点向前走一步,即移动到下一个节点
            currentNode = currentNode->next;
        }
        
        //2.出栈
        //当临时栈tempStack不为空时,依次弹出栈顶元素并添加到结果向量容器result里
        while (!tempStack.empty()) {
            //将栈顶元素添加到result容器里
            result.push_back(tempStack.top());
            //弹出栈顶元素 或者说 释放掉临时栈中的元素
            tempStack.pop();
        }

        //3.最后,返回的结果result,就是链表的逆序结果
        return result;
    }
};

在这里插入图片描述

②补充说明(vector)

vector是C++标准模板库(STL)中的一个序列容器,它可以存储连续存储的元素,允许随机访问,即可以直接通过索引访问元素。vector的元素存储在连续的内存空间中,这意味着它可以提供快速的元素访问,尤其是通过索引。vector是一个模板类,可以用来存储任意类型的元素,例如,vector<int>用于存储整数类型的元素,而vector<string>用于存储字符串

vector提供了多种方法来操作容器中的元素,如:

  • 添加元素:如push_back()方法,可以在vector的末尾添加一个元素。
  • 删除元素:如pop_back()方法,可以删除vector末尾的元素。
  • 访问元素:可以使用operator[]或at()方法通过索引访问元素。
  • 迭代器:vector提供迭代器来遍历容器中的元素。
  • 容量操作:如size()方法返回vector中的元素数量resize()方法可以改变vector的大小,capacity()方法返回vector的容量,即它可以存储的元素数量不引发重新分配。

vector动态数组特性意味着它可以根据需要自动调整其大小来容纳新元素

原理:通过重新分配内存和复制现有元素到新的内存地址来实现的。但要注意,这样虽然提供了更多的灵活性,但在添加或删除元素时可能会导致性能开销,特别是在vector较大时。

很感谢你能看到这里,如有相关疑问,还请下方评论留言。
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我的动力会更足!

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

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

相关文章

智能分析网关V4安全帽检测/反光衣检测/通用工服检测算法及应用

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

MCTS代码

这段代码的背景是玩一个游戏。游戏的参数有NUM_TURNS&#xff0c;在第i回合&#xff0c;你可以从一个整数[-2,2,3&#xff0c;-3]*&#xff08;NUM_TURNS1-i&#xff09;中进行选择。例如&#xff0c;在一个4回合的游戏中&#xff0c;在第1回合&#xff0c;你可以从[-8,8,12&am…

蓝桥杯-单片机组基础5——外部中断与LED的控制(附小蜜蜂课程代码)

蓝桥杯单片机组备赛指南请查看这篇文章&#xff1a;戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K6…

C语言:字符函数 字符串函数 内存函数

C语言&#xff1a;字符函数 & 字符串函数 & 内存函数 字符函数字符分类函数字符转换函数tolowertoupper 字符串函数strlenstrcpystrcatstrcmpstrstrstrtok 内存函数memcpymemmovememsetmemcmp 字符函数 顾名思义&#xff0c;字符函数就是作用于字符的函数&#xff0c;…

Linux 常用的文本处理工具

目录 cat 连接 more/less 分页 tail 实时 cat 连接 将一个或多个文件的内容连接并显示在终端上&#xff0c;创建新文件或将内容追加到已有文件。 不会分屏显示文件内容&#xff0c;适用于较小的文件。 cat 文件1.txt 文件2.txt # 连接并显示文件1.txt和文件2.txt的内容 …

qsort函数的模拟实现(冒泡排序模拟)

冒泡排序&#xff1a; 从第一个元素开始&#xff0c;依次比较相邻的两个元素&#xff0c;如果顺序不对就交换它们。 经过一轮遍历后&#xff0c;最大&#xff08;或最小&#xff09;的元素会排在最后。 重复进行上述步骤&#xff0c;直到没有任何元素需要交换&#xff0c;即…

C++/数据结构:AVL树

目录 一、AVL树的概念 二、AVL树的实现 2.1节点定义 2.2节点插入 三、AVL树的旋转 3.1新节点插入较高左子树的左侧&#xff1a;右单旋 3.2新节点插入较高右子树的右侧&#xff1a;左单旋 3.3新节点插入较高左子树的右侧---左右&#xff1a;先左单旋再右单旋 3.4新节点插…

3. kubectl 命令行交互

在维护 Kubernetes 系统集群时&#xff0c;kubectl 应该是最常用的工具之一。从 Kubernetes 架构设计的角度看&#xff0c;kubectl 工具是 Kubernetes API Server 的客户端。它的主要工作是向 Kubernetes API Server 发起 HTTP 请求。Kubernetes 是一个完全以资源为中心的系统&…

前端Vue3项目如何打包成Docker镜像运行

将前端Vue3项目打包成Docker镜像并运行包括几个主要步骤&#xff1a;项目打包、编写Dockerfile、构建镜像和运行容器。下面是一个基本的流程&#xff1a; 1. 项目打包 首先&#xff0c;确保你的Vue3项目可以正常运行和打包。在项目根目录下执行以下命令来打包你的Vue3项目&am…

Redis 之七:穿透、击穿、雪崩

&#xff08;本内容部分来自知乎网等网络&#xff09; Redis 缓存的使用&#xff0c;极大的提升了应用程序的性能和效率&#xff0c;特别是数据查询方面。但同时&#xff0c;它也带来了一些问题。其中&#xff0c;最要害的问题&#xff0c;就是数据的一致性问题&#xff0c;从严…

大模型(LLM)的量化技术Quantization原理学习

在自然语言处理领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域的应用越来越广泛。然而&#xff0c;随着模型规模的增大&#xff0c;计算和存储资源的需求也急剧增加。为了降低计算和存储开销&#xff0c;同时保持模型的性能&#xff0c;LLM大模型…

MBR20100FCT-ASEMI适配开关电源MBR20100FCT

编辑&#xff1a;ll MBR20100FCT-ASEMI适配开关电源MBR20100FCT 型号&#xff1a;MBR20100FCT 品牌&#xff1a;ASEMI 封装&#xff1a;ITO-220AB 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;20A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xf…

DangZero:通过直接页表访问的高效UAF检测(DangZero实现IMPLEMENTATION翻译)

We implement DangZero as a shared library that overlays the de- fault memory allocator via LD_PRELOAD. Additionally, DangZero requires a backend to be available for direct page table access, which we describe in detail in the following section. 我们将DangZ…

mac苹果电脑c盘满了如何清理内存?2024最新操作教程分享

苹果电脑用户经常会遇到麻烦:内置存储器(即C盘)空间不断缩小&#xff0c;电脑运行缓慢。在这种情况下&#xff0c;苹果电脑c盘满了怎么清理&#xff1f;如何有效清理和优化存储空间&#xff0c;提高计算机性能&#xff1f;成了一个重要的问题。今天&#xff0c;我想给大家详细介…

Neo4j aura 官方网站快速入门新手教精读-从官方教程学习知识图谱

Neo4j 官方网站快速入门新手教精读 本文旨在为Neo4j新手提供一份全面的入门指南。除了基础的文本解释&#xff0c;我在里面还插入了每一步骤的详细截图或者自己画的图&#xff0c;从官方了解知识肯定比自己乱看要权威一些&#xff0c;有看不懂的不要纠结了解大概意思即可&#…

springboot支持的常用日志框架介绍

日志系统是计算机系统中用于记录和跟踪事件、错误和信息的软件组件。在软件开发和维护过程中&#xff0c;日志系统起着至关重要的作用。它可以帮助开发人员了解软件的运行情况&#xff0c;快速定位和解决问题。本文将从以下几个方面介绍日志系统&#xff1a;日志系统概述、Spri…

C/C++内存管理及内存泄漏详解

目录 C/C内存分布 C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free C内存管理方式 new/delete操作内置类型 new和delete操作自定义类型 operator new与operator delete函数 new和delete的实现原理 内置类型 自定义类型 内存泄漏 概念 内存泄漏分类 ⭐…

Vins-Moon配准运行

Vins-Moon运行 源码地址电脑配置环境配置编译适配Kitti数据集运行结果Euroc数据集kitti数据集 evo评估&#xff08;KITTI数据&#xff09;输出轨迹(tum格式)结果 源码地址 源码链接&#xff1a;https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git 电脑配置 Ubuntu 18.…

机器学习:模型评估和模型保存

一、模型评估 from sklearn.metrics import accuracy_score, confusion_matrix, classification_report# 使用测试集进行预测 y_pred model.predict(X_test)# 计算准确率 accuracy accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy*100:.2f}%")# 打印…

MySQL 表的基本操作,结合项目的表自动初始化来讲

有了数据库以后&#xff0c;我们就可以在数据库中对表进行增删改查了&#xff0c;这也就意味着&#xff0c;一名真正的 CRUD Boy 即将到来&#xff08;&#x1f601;&#xff09;。 查表 查看当前数据库中所有的表&#xff0c;使用 show tables; 命令 由于当前数据库中还没有…