【左程云算法全讲2】链表、栈、队列、递归、哈希表和有序表
系列综述:
💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞和关注一下呗,谢谢🎈🎄🌷!!!
🌈【C++】秋招&实习面经汇总篇
文章目录
- 面试技巧
- 链表
- 栈和队列
- 递归
- 参考博客
😊点此到文末惊喜↩︎
面试技巧
- 写算法时候也要阐述自己的思路,即使写不出来
- 面试的算法:必须找到最优的解
链表
- 单向链表数据结构
// 单链表数据结构 struct LinkNode {int val;struct LinkNode *next;LinkNode(int v): val(v), next(nullptr){} }; // 反转单链表 LinkNode *ReverseLinkList(LinkNode *head) {LinkNode *prev = nullptr;LinkNode *next = nullptr;while (head != nullptr) { // head充当cur指针,表示每个操作的结点next = head->next; // 记录值head->next = prev;prev = head; // 两个指针的迭代head = next;}return prev; } - 双向链表数据结构
- 使用
双链表作为底层实现栈和队列
struct LinkNode {int val;struct LinkNode *prev;struct LinkNode *next;LinkNode(int v): val(v), prev(nullptr), next(nullptr){} }; // 反转双向链表 LinkNode *ReverseLinkList(LinkNode *head) {LinkNode *prev = nullptr;LinkNode *next = nullptr;while (head != nullptr) { // head充当cur指针,表示每个操作的结点next = head->next; // 记录值head->next = prev; // key:当前双链表结点两个指针反转head->prev = next;prev = head; // 两个指针的迭代head = next;}return prev; }// 删除指定结点 ListNode *DeleteTarget(ListNode *head, int target) {ListNode *vhead = new ListNode(-1);vhead->next = head;ListNode *prev = vhead;ListNode *cur = head;while (cur != nullptr) {if (cur->val == target) {ListNode *p = cur;cur = cur->next;delete p; // 释放结点,jvm会自动释放prev->next = cur;} else {prev = cur;cur = cur->next;}}return vhead->next; } 设计一个模板双链表,可以进行头部和尾部的增删,以及改查操作,并进行优化 - 使用
栈和队列
-
双链表实现栈和队列
-
数组实现栈和队列
- 数组队列的实现应该是一个环状结构,使用
-
以O(1)时间获取当前栈的最小值
- leetcode题目:最小栈
- 思路1:最小栈同步记录对应的栈内最小值
- 思路2:最小栈只记录栈内的最小值,只有当前栈和最小栈顶元素相等,最小栈栈顶才弹出
class MinStack {
public:/** initialize your data structure here. */MinStack() {min_st.push(INT_MAX);}void push(int x) {cur_st.push(x);int p = min_st.top();// 最小栈的栈顶一直记录栈内的最小值if (x <= p) {min_st.push(x);} else {min_st.push(p);}}void pop() {cur_st.pop();min_st.pop();}int top() {return cur_st.top();}int getMin() {return min_st.top();}
private:// 使用两个栈记录,一个记录当前栈,另一个栈顶一直为栈内最小元素stack<int> cur_st; stack<int> min_st;
};
- 使用
栈实现队列- 思路:两个栈,一个记录压入的元素,一个记录弹出的元素。
class MyQueue {
public:MyQueue() {}// 弹出栈为空则压入栈全部倒进弹出栈中void PushToPop(){if (pop_st.empty()) {while (!push_st.empty()) {pop_st.push(push_st.top());push_st.pop();}}}// 压入一个,则尝试倒栈void push(int x) {push_st.push(x);PushToPop();}// 先倒栈,在尝试弹出int pop() {PushToPop();int p = pop_st.top();pop_st.pop();return p;}int peek() {PushToPop();return pop_st.top();}bool empty() {return pop_st.empty() && push_st.empty();}
private:stack<int> push_st;stack<int> pop_st;
};
- 使用
队列实现栈- 思路:将队列头部的元素按序重新添加到队列尾部,其中最后一个即栈顶元素
class MyStack {
public:queue<int> que;/** Initialize your data structure here. */MyStack() { }/** Push element x onto stack. */void push(int x) {que.push(x);}/** Removes the element on top of the stack and returns that element. */int pop() {int size = que.size();size--;while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部que.push(que.front());que.pop();}int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了que.pop();return result;}// 队列的末尾元素即为栈顶元素int top() {return que.back();}/** Returns whether the stack is empty. */bool empty() {return que.empty();}
};
递归
- 递归的固定参数可以使用
全局或者引用,其中的可变参数作为参数 - 递归求数组的最大值
int process(vector<int> &vec, int L, int R) {if (L == R) return vec[L];int mid = L + ((R-L)>>1);int left_max = process(vec, L, mid);int right_max = process(vec, mid+1, R);return max(left_max, right_max);
}
- 任何递归都可以改成非递归,因为递归本质利用了系统栈
- 特殊复杂度 T ( N ) = a ∗ T ( N / b ) + O ( N c ) T(N) = a*T(N/b) + O(N^c) T(N)=a∗T(N/b)+O(Nc),其中a、b和c都是常数,a是递归次数,b为递归划分分数,c
- 如果 l o g b a < d log_ba < d logba<d,复杂度为 O ( N d ) O(N^d) O(Nd)
- 如果 l o g b a > d log_ba > d logba>d,复杂度为 O ( N l o g b a ) O(N^{log_ba}) O(Nlogba)
- 如果 l o g b a = d log_ba = d logba=d,复杂度为 O ( N d ∗ l o g N ) O(N^d * logN) O(Nd∗logN)
🚩点此跳转到首行↩︎
参考博客
- 对数器
- 单调队列
- 快速链表quicklist
- 《深入理解计算机系统》
- 侯捷C++全系列视频
- 待定引用
- 待定引用
- 待定引用
相关文章:
【左程云算法全讲2】链表、栈、队列、递归、哈希表和有序表
系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考…...
SQL第三次上机作业
1.查询与王利就读同一专业学生的借书证号和姓名 SELECT Lno,Rname FROM Reader WHERE Dept(SELECT DeptFROM ReaderWHERE Rname王利)2.查询比希望出版社出版的所有图书价格都高的图书信息 SELECT * FROM Book WHERE Price>(SELECT MAX(Price)FROM BookWHERE Press希望出版…...
前端事件案例补充
目录 定时器示例 搜索框示例 省市联动 定时器示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><meta name"viewport" content"widthdevice-width, init…...
3.8 Android eBPF HelloWorld调试(二)
写在前面 我们开发eBPF程序的初衷就是再不改动内核的情况下,将内核监控数据传递给到用户态;像应用进程开发一样开发内核监控程序。 Android开机的时候eBPF程序被加载器加载到内核中,但此时它并没有被附加到内核函数上去,也就是ebpf程序并不会执行,我们可以理解为,它仅仅被…...
xss如何快速提取cookies
<script>alert(111)</script> <img srcx onerroralert(document.cookie)>测试一下baidu的xss <script>alert(111)</script><img srcx οnerrοralert(document.cookie)>...
在 ASP.NET C# 中用Aspose.PDF将 PDF 页面转换为 JPG 图像
PDF 是一种通用格式,通常用于打印和共享文档。 (一)C# PDF to JPG Converter API - 免费下载 Aspose.PDF for .NET是一个强大的 PDF 操作 API,可让您在 .NET 应用程序中创建和处理 PDF 文件。此外,它还允许您将 PDF 文…...
Docker Compose安装milvus向量数据库单机版-milvus基本操作
目录 安装Ubuntu 22.04 LTS在power shell启动milvus容器安装docker desktop下载yaml文件启动milvus容器Milvus管理软件Attu python连接milvus配置下载wget示例导入必要的模块和类与Milvus数据库建立连接创建名为"hello_milvus"的Milvus数据表插入数据创建索引基于向量…...
极致性能优化:前端SSR渲染利器Qwik.js | 京东云技术团队
引言 前端性能已成为网站和应用成功的关键要素之一。用户期望快速加载的页面和流畅的交互,而前端框架的选择对于实现这些目标至关重要。然而,传统的前端框架在某些情况下可能面临性能挑战且存在技术壁垒。 在这个充满挑战的背景下,我们引入…...
ES6~ES13新特性(二)
文章目录 一、ES71.Array Includes2.指数exponentiation运算符 二、ES81.Object values2.Object entries3.String Padding4.Trailing Commas5.Object Descriptors 三、ES9四、ES101.flat flatMap2.Object fromEntries3.trimStart、trimEnd4.其他知识点 五、ES111.BigInt2.Nulli…...
soildwork2022怎么样添加螺纹孔?
1.退出草图模式,点击需要添加螺纹孔的物体面,选中“特征”中的“异形孔向导” 2.选中“孔类型”为“直螺纹孔”,“标准”,“类型”,“孔规格”终止条件等。 3.设置完之后选择“位置” 4.鼠标左键在物体面上点一下&…...
【t5 pytorch版源码学习】t5-pegasus-pytorch源码学习
0. 项目来源 中文生成式预训练模型,以mT5为基础架构和初始权重,通过类似PEGASUS的方式进行预训练。 bert4keras版:t5-pegasus pytorch版:t5-pegasus-pytorch 本次主要学习pytorch版的代码解读。 项目结构: train…...
【springboot】spring的Aop结合Redis实现对短信接口的限流
前言 场景: 为了限制短信验证码接口的访问次数,防止被刷,结合Aop和redis根据用户ip对用户限流 1.准备工作 首先我们创建一个 Spring Boot 工程,引入 Web 和 Redis 依赖,同时考虑到接口限流一般是通过注解来标记,而注解…...
【MedusaSTears】怎么禁用edge浏览器截图功能?
版本 Microsoft Edge 版本 119.0.2151.44 (正式版本) (64 位) Ctrl Shift S 竟然是浏览器的截屏? 特么的啥时候多了这么个快捷键? 然后还没办法禁用,真TMD傻哔 edge://settings/accessibility解决方式: 参考资料: 怎么禁用edge浏览器截图功能? 您好&#x…...
【计算机网络】(谢希仁第八版)第三章课后习题答案
第三章 1.数据链路(即逻辑链路)与链路(即物理链路)有何区别? “电路接通了”与”数据链路接通了”的区别何在? 答:数据链路与链路的区别在于数据链路出链路外,还必须有一些必要的规程来控制数据的传输,因此,数据链路比链路多了…...
批量异步任务处理
当我们在项目中遇到很多业务同时处理,如果是串行肯定是影响性能的,这时候就需要异步执行了,说道异步肯定就有很多方案了 方案一: 比如使用spring的异步注解,比如下面的代码,每个方法上面都是异步注解,当时…...
宜昌市公安局、点军区政府与中科升哲达成战略合作,共建视频图像联合创新实验室
11月3日,宜昌视频图像联合创新战略合作签约仪式在宜昌市公安局举行。 宜昌市副市长、市公安局党委书记、局长上官福令,市公安局党委副书记、副局长龚海波,宜昌市点军区委书记万红,点军区委副书记、区长黄文云,升哲科技…...
java版小程序商城免费搭建-直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销
1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...
Linux下yum源配置实战
一、Linux下软件包的管理 1、软件安装方式 ① RPM包管理(需要单独解决依赖问题) ② YUM包管理(需要有网络及YUM仓库的支持,会自动从互联网下载软件,自动解决依赖) ③ 源码安装(安装过程比较…...
JSONP 跨域访问(2), JSONP劫持
JSONP 跨域访问(2), JSONP劫持 一, 利用 XSS 漏洞执行jsonp 1. 利用过程 发现有jsonp的请求: <script type"text/javascript" src"http://192.168.112.200/security/jsonp.php?callbackjsonpCallback"></script>向xss漏洞的位置注入代码…...
【java】实现自定义注解校验——方法一
自定义注解校验的实现步骤: 1.创建注解类,编写校验注解,即类似NotEmpty注解 2.编写自定义校验的逻辑实体类,编写具体的校验逻辑。(这个类可以实现ConstraintValidator这个接口,让注解用来校验) 3.开启使用自定义注解进…...
SigmaStar SSD21X系列芯片:智能家居与工业控制的多场景显示解决方案
1. SigmaStar SSD21X系列芯片:智能家居与工业控制的显示利器 第一次接触SigmaStar SSD21X系列芯片是在一个智能门锁项目上。当时客户要求低成本实现高清彩色触控屏,还要支持人脸识别和远程控制。测试了几款方案后,SSD210的表现让我印象深刻—…...
统计了1000+计算机研究生的就业去向后,才知道就业差距这么大!
统计了1000计算机研究生的就业去向后,才知道就业差距这么大! ✦ 今天图图汇总整理了5所不同层次院校公布的计算机学院就业情况,信息包括但不限于就业率、就业单位、就业地域、毕业薪酬等,各位计算机考研人可以参考,在…...
ECharts 进阶:用pictorialBar打造沉浸式3D数据看板
1. 从立体柱状图到3D数据看板的进化之路 第一次看到pictorialBar这个配置项时,我正对着产品经理要求的"科技感大屏"发愁。传统柱状图在会议室大屏上就像黑白电视一样乏味,直到发现ECharts这个隐藏技能——用几行代码就能把平面图表变成带光影效…...
CanCanCan控制器助手终极指南:load_and_authorize_resource深度解析与最佳实践
CanCanCan控制器助手终极指南:load_and_authorize_resource深度解析与最佳实践 【免费下载链接】cancancan The authorization Gem for Ruby on Rails. 项目地址: https://gitcode.com/gh_mirrors/ca/cancancan CanCanCan是Ruby on Rails最强大的授权gem&…...
导师严选!盘点2026年冠绝行业的的AI智能降重工具
轻松降低论文AI率在2026年已不再是天方夜谭。以下是2026年最炸裂、实测效果显著的AI智能降重工具,覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景,帮你高效搞定毕业论文。 一、全流程王者:一站式搞定论文全链路 这类工具…...
Engram:解锁AI潜能,系统优化新高度!
Engram是一种基于LLM的智能体研究者架构,旨在解决系统优化中AI的两个关键局限:进化邻域偏差和连贯性上限。通过将长时程探索与单一上下文窗口解耦,Engram组织一系列智能体迭代设计、测试和分析机制。每次运行结束时,智能体将代码快…...
熟悉C#如何转TypeScript——SDK与包引用的主要区别
SDK与包引用的主要区别 在 TypeScript 开发中,包引用(import/require)并不是 SDK 的集合,而是模块化代码库的引用方式。以下是详细解释:核心概念对比特性TypeScript/JavaScript (npm).NET Core SDK包管理工具npm / yar…...
SD-WebUI Cleaner 终极指南:AI图像清理与对象移除完整教程
SD-WebUI Cleaner 终极指南:AI图像清理与对象移除完整教程 【免费下载链接】sd-webui-cleaner An extension for stable-diffusion-webui to remove any object. 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-cleaner 你是否曾经想要从照片中移除不…...
原创:黄大年茶思屋难题揭榜第141期|5道核心题精简公开·未获技术反馈求指正
黄大年茶思屋难题揭榜第141期|5道核心题精简公开未获技术反馈求指正 作者:华夏之光永存 摘要 这五道题我们已完整解题并提交黄大年茶思屋难题揭榜,最终被退回,但平台未给出任何具体技术驳回意见、未指明缺陷、未提供修改方向。我们…...
Java面试-test
test...
