剑指offer刷题记录Day 1 03.数组中重复的数字 ---> 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😊)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我的动力会更足!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1_SQL

文章目录 前端复习SQL数据库的分类关系型数据库非关系型数据库&#xff08;NoSQL&#xff09; 数据库的构成软件架构MySQL内部数据组织方式 SQL语言登录数据库数据库操作查看库创建库删除库修改库 数据库中表的操作选择数据库创建表删除表查看表修改表 数据库中数据的操作添加数…

MATLAB练习题:排队论问题的模拟

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 下面我们来看一道排队论的题目。假设某银行工作时间内只有一个…

Java多线程导入Excel示例

在导入Excel的时候&#xff0c;如果文件比较大&#xff0c;行数很多&#xff0c;一行行读往往速度比较慢&#xff0c;为了加快导入速度&#xff0c;我们可以采用多线程的方式 话不多说直接上代码 首先是Controller import com.sakura.base.service.ExcelService; import com.s…

ADBMS1818芯片资料介绍(1)

ADBMS1818数据手册和产品信息 | Analog Devices 一、芯片简介  可测量多达18串电池电压  3 mV最大总测量误差  内置isoSPI接口  使用单根双绞线&#xff0c;长达100米  290 μs内可完成系统中所有单体电池电压测量 二、芯片内核和isoSPI状态 ADBMS1818内核状态说明…

Mac清理电脑垃圾工具CleanMyMac X4.15中文免费版下载

嘿&#xff0c;亲爱的Mac用户们&#xff0c;你们是否曾经想象过你的电脑是一座美丽的城市&#xff0c;而垃圾文件则是那些不速之客&#xff0c;悄悄堆积&#xff0c;影响着城市的整体美观。今天&#xff0c;我们就来聊聊Mac为什么会产生垃圾文件&#xff0c;这些垃圾文件会对你…

Java基于微信小程序的4S店汽车保养小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

分类问题经典算法 | 二分类问题 | Logistic回归:公式推导

目录 一. Logistic回归的思想1. 分类任务思想2. Logistic回归思想 二. Logistic回归算法&#xff1a;线性可分推导 一. Logistic回归的思想 1. 分类任务思想 分类问题通常可以分为二分类&#xff0c;多分类任务&#xff1b;而对于不同的分类任务&#xff0c;训练的主要目标是…

基于python+django的求职招聘管理系统源码+开发文档

该系统是基于pythondjango的求职招聘网站、网上招聘管理系统、网上人才招聘系统、毕业生求职招聘系统、大学生求职招聘系统、校园招聘系统、企业招聘系统。写了2周&#xff0c;给师弟的课程作业。 源码地址 https://github.com/geeeeeeeek/python_job 功能介绍 平台采用B/S结…

2.25_模式识别大作业的三种方法

filename sys.argv[1] df pd.read_csv(filename,index_col["ID"]) ax df.plot() ax.set_xlabel("Data_ID") ax.set_ylabel("load_value") plt.show() 这段代码是用来读取一个CSV文件&#xff0c;并将文件中的数据绘制成一个简单的折线图。 在…

202435读书笔记|《半小时漫画中国史》——读点经济学与历史,生活更美好,趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有

202435读书笔记|《半小时漫画中国史》——读点经济学与历史&#xff0c;生活更美好&#xff0c;趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有 1. 土地政策、度量衡及税收2. 商鞅变法3. 西汉经济4. 西汉盐铁大辩论5. 西汉丝绸之路 《半小时漫画中国史&#xff1a;经济…

bert 相似度任务训练,简单版本

目录 任务 代码 train.py predit.py 数据 任务 使用 bert-base-chinese 训练相似度任务&#xff0c;参考&#xff1a;微调BERT模型实现相似性判断 - 知乎 参考他上面代码&#xff0c;他使用的是 BertForNextSentencePrediction 模型&#xff0c;BertForNextSentencePred…

一文讲透:可视化大屏中3D元素的融入和使用方法

在可视化大屏中&#xff0c;3D元素融入的越来越多&#xff0c;贝格前端工场经常接到这类项目&#xff0c;很多老铁认为加个3D效果很easy&#xff0c;其实不然&#xff0c;工序非常复杂&#xff0c;总结如下。 一、什么是3D技术 三维展示&#xff08;3D展示&#xff09;是指使用…

gpt生成器,批量gpt文章生成器

GPT&#xff08;生成式预训练模型&#xff09;生成器软件在当今的数字化时代扮演着越来越重要的角色&#xff0c;它们通过人工智能技术&#xff0c;可以自动生成各种类型的文章内容&#xff0c;为用户提供了无限的创作可能性。本文将介绍6款不同的GPT生成器软件&#xff0c;并介…

退休教师40年教龄补贴多少钱

那些默默奉献了四十年的老教师&#xff0c;他们退休后能得到多少补贴&#xff1f;今天&#xff0c;就让我们一起揭开这层面纱&#xff0c;看看教师退休金背后的故事。 教师这份职业&#xff0c;不仅仅是传授知识那么简单。它更代表着一种责任&#xff0c;一种对下一代无尽的关爱…

什么是微前端

微前端是一种web应用构建方式。 微前端在2016年ThoughtWorks Technology Radar正式被提出。微服务这个被广泛应用于服务端的技术范式扩展到前端领域。现代的前端应用的发展趋势正在变得越来越富功能化&#xff0c;富交互化&#xff0c;也就是SPA应用&#xff1b;这样越来越复杂…

word文档空格不能有下划线【笔记】

word文档空格不能有下划线 2024-3-1 21:20:24 推荐 word下划线打不出来了&#xff0c;是怎么回事&#xff1f; 问题 字后面打不出来下划线 操作 1.点击文件 左上角&#xff0c;点击“文件”。 2.点击选项 鼠标下滑&#xff0c;点击“选项”。 3.点击常规与保存 点击“…

CY8C42(未知.UDB模块使用)

开发UDB模块要用到verilog了 虽然官方给出了图形配置&#xff0c;但是完全看不懂。 没办法&#xff0c;我先去学FPGA了&#xff0c;去买矿卡了。 后面等学一点FPGA再来更新吧&#xff0c;可能PSOC里面有些内容会随机更新吧。 官方给了一份文档&#xff0c;链接在这&#xff0…

使用el-form之表单校验自动定位到报错位置问题,,提升用户体验

需求描述 由于需要填写的表单项太多&#xff0c;提交的时候校验不通过&#xff0c; 如果没填写的表单项在最上面&#xff0c;用户看不到不知道发生了啥&#xff0c; 所以需要将页面滚动定位到第一个报错的表单项位置&#xff0c;提升用户体验实现步骤 1. 给form表单添加ref …

智慧楼宇的心脏:E6000物联网主机

智慧楼宇是指通过全面覆盖的感知设备和互联网技术&#xff0c;为建筑提供高效、舒适、安全、环保、可持续的智能化服务。 在科技快速发展的今天&#xff0c;智慧楼宇已经不再是遥不可及的梦想。而在这个梦想成真的过程中&#xff0c;物联网主机扮演着至关重要的角色。它如同智慧…

加密与安全_深入了解Hmac算法(消息认证码)

文章目录 PreHMAC概述常见的Hmac算法Code随机的key的生成 KeyGeneratorHmacMD5用Hmac算法取代原有的自定义的加盐算法 HmacMD5 VS MD5HmacSHA256 Pre 加密与安全_深入了解哈希算法中我们提到&#xff0c; 存储用户的哈希口令时&#xff0c;要加盐存储&#xff0c;目的就在于抵…