剑指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循环遍历没有找到重复的数字,按题目要求输出-1return -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;//遍历字符串sfor (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.hqwc.cn/news/504098.html

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

相关文章

mysql学习笔记3——授权操作

利用select查询数据库数据时&#xff0c;可以在后面加上参数 意为限制显示条数 对数据库进行远程操作时&#xff0c;为了避免不同用户操作混乱&#xff0c;要设置不同用户的权限&#xff0c;可以使用 具体格式为 其中*代表任意均可 &#xff0c;这里用户创建采用与授权同时进…

【C++】继承与多态的常见问题解析

文章目录 继承1.什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f;2. 什么是菱形虚拟继承&#xff1f;如何解决数据冗余和二义性的3. 继承和组合的区别&#xff1f;什么时候用继承&#xff1f;什么时候用组合&#xff1f;1.继承&#xff08;Inheritance&#xff09;…

Linux学习笔记:进程的终止和等待

进程终止和等待 进程终止进程退出场景进程常见退出方式_exit()退出exit()退出return退出exit()与_exit()的不同之处 进程的等待什么是进程等待?为什么要进行进程等待如何进行等待wait方式:waitpid方式 进程终止 进程退出场景 一般来讲,进程的退出场景有三种: 代码运行完毕,…

14.5二叉树的前序中序后序遍历

在14.4的代码基础上进行实现14.4二叉树层次建树&#xff08;CLion实现&#xff09;-CSDN博客 代码&#xff1a; function.h代码 // // Created by admin on 2024/2/28. //#ifndef INC_1_TREE_FUCTION_H #define INC_1_TREE_FUCTION_H #include <stdio.h> #include &l…

vscode c/c++ 检测到 #include 错误。请更新 includePath。

问题背景 使用vscode打开项目后&#xff0c;头文件显示红色波浪线&#xff0c;没有引入。 检测到 #include 错误。请更新 includePath。已为此翻译单元(xxx)禁用波形曲线。 解决方法 gcc -v -E -x c - 显示所有头文件路径。 打开c_cpp_properties.json文件&#xff0c;粘贴…

UE4 Niagara 关卡3.1官方案例解析二

自己尝试做做&#xff0c;打乱顺序 1、新建空的niagara system&#xff0c;添加空的发射器。更换渲染器为网格体渲染器并添加网格体。 2、发射器更新里面添加Spawn Rate&#xff0c;发射个粒子看看 效果图&#xff1a; 3、采样静态网格体&#xff0c;网格体粒子出生于静态网格…

【Python】Python全国工作岗位数据分析(源码)【独一无二】课程设计

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

php源码 单色bmp图片取模工具 按任意方式取模 生成字节数组 自由编辑点阵

http://2.wjsou.com/BMP/index.html 想试试chatGPT4生成&#xff0c;还是要手工改 php 写一个网页界面上可以选择一张bmp图片&#xff0c;界面上就显示这张bmp图片&#xff0c; 点生成取模按钮&#xff0c;在图片下方会显示这张bmp图片的取模数据。 取模规则是按界面设置的&a…

jupyter 用pyecharts进行数据分析

一、jupyter和pyecharts下载和打开 因为我是用的pycharm&#xff0c;所以我直接在pycharm项目终端中下载pip install jupyter,pip install pyecharts 在你下载的项目路径中输入jupyter notebook 之后会进入页面 Jupyter 具体使用参考这个链接&#xff1a;Jupyter Notebook基本…

深入理解变量名与指针:编程语言中的抽象与直接内存访问

深入理解变量名与指针&#xff1a;编程语言中的抽象与直接内存访问 在编程世界里&#xff0c;理解变量名与指针的概念是理解软件是如何与计算机硬件交互的关键。这篇博客旨在深入探讨变量名和指针在不同编程语言中的作用和区别&#xff0c;以及它们在内存管理中的意义。 变量名…

【python】python懂车帝数据可视化(代码+报告)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

windows系统下安装RabbitMQ

一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的操作&#xff0c;选择两者版本时一定要参考版本的兼容性 1.RabbitMQ国内下载地址&#xff0c;因官网下载比较缓慢&#xff0c;还是国内的稍微快些 https://r…