栈与队列习题分享(精写)
最小栈 题解
一、题目描述
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
-
MinStack()
初始化堆栈对象。 -
void push(int val)
将元素val
推入堆栈。 -
void pop()
删除堆栈顶部的元素。 -
int top()
获取堆栈顶部的元素。 -
int getMin()
获取堆栈中的最小元素。
二、解题思路
为了在常数时间内检索到最小元素,我们可以使用两个栈:一个主栈 _st
用于存储所有元素,另一个辅助栈 _minst
用于存储当前的最小元素。
-
push(int val)
操作:-
将元素
val
压入主栈_st
。 -
检查辅助栈
_minst
是否为空,或者val
是否小于等于辅助栈_minst
的栈顶元素。如果是,则将val
也压入辅助栈_minst
。这样可以保证辅助栈_minst
的栈顶元素始终是当前主栈_st
中的最小元素。
-
-
pop()
操作:-
检查主栈
_st
的栈顶元素是否等于辅助栈_minst
的栈顶元素。如果相等,说明即将从主栈_st
中弹出的元素是当前的最小元素,因此需要将辅助栈_minst
的栈顶元素也弹出。 -
弹出主栈
_st
的栈顶元素。
-
-
top()
操作:-
直接返回主栈
_st
的栈顶元素。
-
-
getMin()
操作:-
直接返回辅助栈
_minst
的栈顶元素,因为辅助栈_minst
的栈顶元素始终是当前主栈_st
中的最小元素
-
三、代码
#include <stack>class MinStack {
public:// 主栈,存储所有元素std::stack<int> _st;// 辅助栈,存储当前的最小元素std::stack<int> _minst;MinStack() {}void push(int val) {_st.push(val);if (_minst.empty() || val <= _minst.top()) {_minst.push(val);}}void pop() {if (_st.top() == _minst.top()) {_minst.pop();}_st.pop();}int top() {return _st.top();}int getMin() {return _minst.top();}
};
四、复杂度分析
-
时间复杂度:
push(int val)
操作:每次压入元素时,主栈和辅助栈的操作时间复杂度均为 \(O(1)\),所以总的时间复杂度为 \(O(1)\)。pop()
操作:每次弹出元素时,主栈和辅助栈的操作时间复杂度均为 \(O(1)\),所以总的时间复杂度为 \(O(1)\)。top()
操作:获取主栈栈顶元素的时间复杂度为 \(O(1)\)。getMin()
操作:获取辅助栈栈顶元素的时间复杂度为 \(O(1)\)。
-
空间复杂度:
- 主栈
_st
存储所有元素,在最坏情况下,需要存储 n 个元素,空复杂度为 \(O(n)\)。 - 辅助栈
_minst
在最坏情况下,也需要存储 n 个元素(例如元素依次递减入栈),空间复杂度为 \(O(n)\)。所以总的空间复杂度为 \(O(n)\),其中 n 是栈中元素的个数。
- 主栈
栈的压入、弹出序列
一、题目描述
-
给定两个整数序列
pushV
和popV
,pushV
表示栈的压入顺序,需要判断popV
是否为该栈可能的弹出顺序。 -
约束条件为:两个序列长度相等且在
0
到1000
之间,pushV
中的元素取值范围是-1000
到1000
且所有元素互不相同。
二、解题思路
-
辅助栈模拟:利用一个辅助栈
s
来模拟栈的操作。通过遍历pushV
和popV
序列,将pushV
中的元素依次压入辅助栈,在合适的时机尝试弹出栈顶元素与popV
中的元素进行匹配。 -
双指针遍历:使用两个指针,
i
用于遍历popV
,j
用于遍历pushV
。 -
入栈操作:在遍历
popV
时,只要栈为空或者栈顶元素不等于当前popV[i]
,就持续将pushV[j]
压入栈中并移动j
指针,直到满足栈顶元素等于popV[i]
或者j
到达pushV
的末尾。 -
出栈匹配:当栈顶元素等于
popV[i]
时,弹出栈顶元素,表示该元素成功匹配弹出顺序;如果栈顶元素始终不等于popV[i]
,则说明popV
不是合法的弹出顺序,返回false
。 -
最终判断:如果遍历完
popV
后,所有元素都能成功匹配弹出顺序,则返回true
。
三、代码
#include <vector>
#include <stack>class Solution {
public:bool IsPopOrder(std::vector<int> pushV, std::vector<int> popV) {int n = pushV.size();// 辅助栈std::stack<int> s;// 遍历入栈的下标int j = 0;// 遍历出栈的数组for (int i = 0; i < n; i++) {// 入栈:栈为空或者栈顶不等于出栈数组while (j < n && (s.empty() || s.top() != popV[i])) {s.push(pushV[j]);j++;}// 栈顶等于出栈数组if (s.top() == popV[i]) {s.pop();} // 不匹配序列else {return false;}}return true;}
};
- 初始化变量:获取
pushV
的长度n
,初始化辅助栈s
和遍历pushV
的指针j
。 - 遍历
popV
:在for
循环中遍历popV
,对于每个popV[i]
,通过while
循环将pushV
中的元素压入栈,直到栈顶元素等于popV[i]
或者pushV
遍历完。 - 匹配判断:如果栈顶元素等于
popV[i]
,弹出栈顶元素;否则,说明popV
不是合法弹出顺序,返回false
。 - 返回结果:遍历完
popV
后,若所有元素都匹配,返回true
。
四、复杂度分析
- 时间复杂度:由于每个元素最多入栈和出栈一次,所以时间复杂度为 \(O(n)\),其中
n
是序列的长度。 - 空间复杂度:在最坏情况下,辅助栈需要存储所有的元素,所以空间复杂度为 \(O(n)\)。
用队列实现栈
一、题目要求
题目要求使用队列来实现栈的功能,需要实现栈的基本操作,包括push
(入栈)、pop
(出栈)、top
(获取栈顶元素)和empty
(判断栈是否为空)。
二、解题思路
-
数据结构选择:使用两个队列
q1
和q2
来模拟栈。队列的特点是先进先出(FIFO),而栈的特点是后进先出(LIFO),通过巧妙地操作两个队列来实现栈的特性。 -
push
操作:-
每次有新元素
x
要入栈时,先将其放入q2
队列。 -
然后把
q1
队列中所有元素依次取出并放入q2
队列,这样q2
队列的顺序就变为了栈的顺序(后进先出)。 -
最后交换
q1
和q2
,使得q1
成为存储栈元素的队列,q2
为空,方便下一次push
操作。这样保证每次新元素都在q1
的队首,即栈顶位置。
-
-
pop
操作:-
直接取出
q1
的队首元素,因为经过push
操作后,q1
的队首元素就是栈顶元素。 -
取出后将其从
q1
中删除,实现栈的出栈操作。
-
-
top
操作:-
直接返回
q1
的队首元素,该元素即为栈顶元素。
-
-
empty
操作:-
通过判断
q1
是否为空来确定栈是否为空。如果q1
为空,说明栈中没有元素,返回true
;否则返回false
。
-
三、代码实现
#include <queue>class MyStack {
public:MyStack() {}void push(int x) {q2.push(x);while (!q1.empty()) {q2.push(q1.front());q1.pop();} std::swap(q1, q2); }int pop() {int r = q1.front();q1.pop();return r;}int top() {int r = q1.front();return r;}bool empty() {return q1.empty();}
private:std::queue<int> q1, q2;
};
-
构造函数
MyStack()
:目前构造函数为空,可用于初始化一些必要的状态,但在这个实现中暂时没有需要初始化的特殊内容。 -
push(int x)
函数:完成元素入栈操作,如上述思路中所述,通过两个队列的操作和交换来保证新元素在栈顶位置。 -
pop()
函数:返回并删除栈顶元素,即q1
的队首元素。 -
top()
函数:返回栈顶元素,也就是q1
的队首元素。 -
empty()
函数:判断栈是否为空,通过检查q1
是否为空来实现。
四、复杂度分析
-
时间复杂度:
-
push
操作:每次push
操作中,将q1
的元素转移到q2
的过程,时间复杂度为\(O(n)\),其中n是当前栈中元素的数量(因为需要遍历q1
中的所有元素)。其他操作pop
、top
和empty
的时间复杂度均为\(O(1)\),因为它们只涉及对队列的简单操作(取队首、判断是否为空)。
-
-
空间复杂度:
-
总共使用了两个队列
q1
和q2
,在最坏情况下,两个队列中存储的元素总数与栈中元素数量相同,所以空间复杂度为O(n),n为栈中元素的最大数量。
-
栈实现队列
一、题目要求
使用两个栈来实现一个队列的功能,需要实现队列的基本操作,包括 push
(入队)、pop
(出队)、peek
(查看队首元素)和 empty
(判断队列是否为空)。
二、解题思路
-
数据结构选择:选择两个栈
a
和b
来模拟队列的行为。栈的特点是后进先出(LIFO),而队列的特点是先进先出(FIFO),通过巧妙地操作这两个栈来实现队列的特性。 -
push
操作:-
每次有新元素
x
要入队时,直接将其压入栈a
中。因为栈a
用于存储新加入的元素,所以新元素入栈的操作非常简单直接。
-
-
pop
操作:-
先调用
peek
函数获取队首元素(即最早入队的元素)。这是因为在peek
函数中会确保队首元素在栈b
的栈顶。 -
然后从栈
b
中弹出该元素,实现出队操作。这样就保证了先进先出的队列特性。
-
-
peek
操作:-
首先检查栈
b
是否为空。如果栈b
不为空,说明队首元素就在栈b
的栈顶,直接返回栈b
的栈顶元素。 -
如果栈
b
为空且栈a
也为空,说明队列中没有元素,返回 -1。 -
如果栈
b
为空但栈a
不为空,需要将栈a
中的所有元素依次弹出并压入栈b
中。这样做的目的是将栈a
中最早入队的元素转移到栈b
的栈顶,以符合队列先进先出的特性。最后返回栈b
的栈顶元素,即队首元素。
-
-
empty
操作:-
判断队列是否为空,只需检查栈
a
和栈b
是否都为空。如果两个栈都为空,说明队列中没有元素,返回true
;否则返回false
。
-
三、代码实现
#include <stack>class MyQueue {
public:MyQueue() {}void push(int x) {a.push(x);}int pop() {int peek = this->peek();b.pop();return peek;}int peek() {if (!b.empty()) {return b.top();}if (a.empty()) {return -1;}while (!a.empty()) {b.push(a.top());a.pop();}int ret = b.top();return ret;}bool empty() {return a.empty() && b.empty();}private:std::stack<int> a, b;
};
-
构造函数
MyQueue()
:目前构造函数为空,可用于初始化一些必要的状态,但在这个实现中暂时没有需要初始化的特殊内容。 -
push(int x)
函数:将新元素x
压入栈a
中,实现入队操作。 -
pop()
函数:先调用peek
函数获取队首元素,然后从栈b
中弹出该元素,返回队首元素,实现出队操作。 -
peek()
函数:按照上述思路,检查栈b
和栈a
的状态,将元素在两个栈之间转移,最终返回队首元素。 -
empty()
函数:判断栈a
和栈b
是否都为空,返回相应的结果,以确定队列是否为空。
四、复杂度分析
-
时间复杂度:
-
push
操作:时间复杂度为 \(O(1)\),因为只是将元素压入栈a
,操作简单直接。 -
pop
操作:时间复杂度在平均情况下为 \(O(1)\),但在某些情况下(当栈b
为空且需要将栈a
的元素转移到栈b
时),时间复杂度为 \(O(n)\),其中n
是栈a
中元素的数量。 -
peek
操作:时间复杂度在平均情况下为 \(O(1)\),但在某些情况下(当栈b
为空且需要将栈a
的元素转移到栈b
时),时间复杂度为 \(O(n)\),其中n
是栈a
中元素的数量。 -
empty
操作:时间复杂度为 \(O(1)\),因为只需要检查两个栈是否为空。
-
-
空间复杂度:
-
总共使用了两个栈
a
和b
,在最坏情况下,两个栈中存储的元素总数与队列中元素数量相同,所以空间复杂度为 \(O(n)\),其中n
为队列中元素的最大数量。
-
相关文章:
栈与队列习题分享(精写)
最小栈 题解 一、题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素 val 推入堆栈。 void pop() 删除堆栈顶部的元素。 int…...
Kotlin 集合过滤全指南:all、any、filter 及高级用法
在 Kotlin 中,集合过滤是数据处理的核心操作之一。无论是简单的条件筛选,还是复杂的多条件组合,Kotlin 都提供了丰富的 API。本文将详细介绍 filter、all、any、none 等操作符的用法,并展示如何在实际开发中灵活运用它们。 1. 基础…...
【lerobot】3-开源SO-100 主从臂的舵机位置校正、遥控操作(ubuntu系统)
官方从零教程:https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md 8-lerobot aloha装配完毕如何进行遥操作 需要先完成的 组装好了so-100 2个机械臂下载安装了lerobot的代码环境:固定好主从臂,通过usb链接到同一个…...
影刀RPA证书题库包含初级、中级、高级和AP初级
影刀rpa初级证书选择题答案,影刀证书答案,影刀rpa考试,影刀初级考试,影刀初级考试选择题 原因 以前的在线题库https://exam.ezrpa.store/是为了方便更新题目和使用的,但经过实际使用发现大部分人“不会用”࿱…...
LR(0)
LR0就是当我处在自动机为红色这些结束状态的时候,这些红色状态就代表我们识别到了一个句柄,那现在的问题就是识别到了句柄,那要不要对他进行归约?LR0就是我不管当前指针指向的终结符是什么,我都拿它做规约 这里的二号状…...
基于 Python 和 OpenCV 技术的疲劳驾驶检测系统(2.0 全新升级,附源码)
大家好,我是徐师兄,一个有着7年大厂经验的程序员,也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 🍅文末获取源码联系🍅 2025年最全的计算机软件毕业设计…...
Matplotlib库详解
Matplotlib 是 Python 里一个特别常用的绘图库,它能帮你创建各种各样的可视化图形,像折线图、柱状图、散点图等。对于数据可视化、数据分析和科学研究而言,它是非常重要的工具。接下来我会以初学者的视角,为你详细介绍 Matplotlib…...
daz dForce to UE 的原理分析
dForce是物理模拟,不是关键帧动画: dForce是一个物理引擎。当你运行模拟时,Daz Studio会根据你设置的物理属性(如裙子的重量、布料的硬度、摩擦力)、环境因素(如重力、风力)以及与角色的碰撞&am…...
速卖通商品详情API接口:功能、应用与开发指南
前言 在全球跨境电商蓬勃发展的背景下,速卖通(AliExpress)作为阿里巴巴旗下的国际电商平台,凭借丰富的商品种类和庞大的用户群体,成为众多商家和开发者拓展海外市场的首选平台。为了满足商家和开发者对商品数据的深度…...
4月14日星期一今日早报简报微语报早读
4月14日星期一,农历三月十七,早报#微语早读。 1、全国田径大奖赛接力摘金,苏炳添的传奇将延续至全运会; 2、中国红基会:2024年全年总收支12.85亿元; 3、我国2025年电影总票房已突破250亿 位居全球第一&a…...
快速排序(非递归版本)
引言 在排序算法的世界里,快速排序以其高效的性能脱颖而出。它采用分治法的思想,通过选择基准元素将数组分为两部分,递归地对左右两部分进行排序。然而,递归实现的快速排序在处理大规模数据时可能会导致栈溢出的问题。为了解决这…...
Ubuntu20.04 设置开机自启
参考: Ubuntu20.04 设置开机自启_ubuntu进bos系统-CSDN博客...
添加登录和注册功能
先写前端再写后端 前提:ideavue3mybatisspringBoot3前后端分离实现对一张表的增删改查(完整代码版)-CSDN博客 项目地址 1.添加一个Login.vue视图 <template><div class"login_container"><div class"login…...
弱口令爆破
1.简单介绍 弱口令是指一些简单易猜的密码,可通过社工方式和一些爆破工具进行破解,以下介绍一款爆破工具的用法。burpsuite简称BP,一款可以利用字典破解账户密码的工具。 2.部署网站 可以使用PHPstudy的Apache服务,也可以使用I…...
springboot调用python文件,在ubuntu上部署,踩坑之旅(已部署成功)
项目介绍 springboot 调用python文件,python调用另一个数据文件,然后计算出结果,看似简单,实际上有很多坑,因为涉及到python的三方库,有时候下载不下来,有时候版本不匹配,折腾了好久…...
Android studio消息同步机制:消息本地存储,服务器交互减压
文章目录 后端(Flask)代码前端(Android Studio Java)代码 消息同步机制: 手机端可以将消息存储在本地数据库中,减少与服务器的交互压力。同时,通过序列号机制,手机端可以与服务器同步消息&#…...
前端常用组件库全览与推荐
📌 一、组件库生态全景图 🚀 二、React 生态组件库推荐 名称简介官网Ant Design阿里出品,企业级 UI 系统,设计规范完整,适合后台系统https://ant.designMaterial UIGoogle Material Design 实现,样式响应式…...
视觉算法+雾炮联动:开创智能降尘新时代
在许多工业环境中,尤其是那些涉及大量物料搬运和处理的地方,如工厂或仓库,扬尘问题是一个普遍存在的挑战。这不仅影响了工作人员的工作条件,还可能构成健康和安全隐患。为了改善这一状况,不少业主采用了物理方法来减少…...
【Pandas】pandas DataFrame items
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...
易境通WMS系统代理仓解决方案:让代理仓管理无后顾之忧!
易境通WMS系统代理仓解决方案:让代理仓管理无后顾之忧! 对于海外仓企业而言,除了自有仓库外,为了业务发展还会同时代理其他仓库,于是经常会面临主仓代理仓数据同步问题及费用问题。此外,由于个仓库分布较广…...
【智驾中的大模型 -2】VLM 在自动驾驶中的应用
1. 前言 随着端到端 AI 和多模态学习的迅猛发展,VLM(视觉-语言模型)在自动驾驶领域中的应用正逐渐成为一个备受瞩目的重要研究方向。VLM 凭借其强大的融合能力,将视觉(如高清晰度的摄像头图像、精准的雷达数据&#x…...
L1-104 九宫格
L1-104 九宫格 - 团体程序设计天梯赛-练习集 九宫格是一款数字游戏,传说起源于河图洛书,现代数学中称之为三阶幻方。游戏规则是:将一个 99 的正方形区域划分为 9 个 33 的正方形宫位,要求 1 到 9 这九个数字中的每个数字在每一行…...
图像预处理(OpenCV)-part2
4 边缘填充 为什么要填充边缘呢?我们以下图为例。 原图旋转后的图 可以看到,左图在逆时针旋转45度之后原图的四个顶点在右图中已经看不到了,同时,右图的四个顶点区域其实是什么都没有的,因此我们需要对空出来的区域进…...
SpringAI-ollama
SpringAi主要依赖 System Prompt :设置提示词 用来预设角色 ConversationMemory: 对话集 RAG: 检索增强生成 将业务数据存储在向量数据库中(做相似性检索)通过RAG进行链接 Function Calling 用来调用自己的api <dependencyManagement>&…...
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡 通过系统设置查看 点击屏幕左下角的“开始”按钮,打开“设置”应用。在“设置”应用中,点击“网络和 Internet”。在“网络和 Internet”页面中,点击“WLAN”,…...
蓝耘赋能通义万相 2.1:用 C++ 构建高效 AI 视频生成生态
开篇:AI 视频生成新时代的号角 通义万相 2.1:AI 视频生成的领军者 核心技术揭秘 功能特点展示 与其他模型的全面对比 C:高效编程的基石 C 的发展历程与特性 C 在 AI 领域的广泛应用 通义万相 2.1 与 C 的完美融合 融合的意义与价值 …...
tmpfs的监控筛选/dev/shm下的shmem创建
一、背景 在一个比较注重性能的系统上,共享内存的使用肯定非常普遍。为了能更好的了解系统里共享内存的使用,比如创建、删除等操作,我们是可以对其进行监控的。 这篇博客以共享内存的创建监控为例来介绍如何监控共享内存。 这里有一个概念…...
如果你在使用 Ubuntu/Debian:使用 apt 安装 OpenSSH
情况 1:如果你在使用 Ubuntu/Debian: 使用 apt 安装 OpenSSH: bash 复制 sudo apt update sudo apt install openssh-server 完成后检查 SSH 服务状态: bash 复制 sudo systemctl status ssh 情况 2:如果你在使用 Ce…...
设计模式每日硬核训练 Day 11:适配器模式(Adapter Pattern)完整讲解与实战应用
🔄 回顾 Day 10:模板方法模式小结 在 Day 10 中,我们学习了模板方法模式: 它用于定义流程的“骨架”,将固定步骤放在父类,具体实现交给子类完成。实现了“统一流程 差异化行为”的复用范式。 而今天&am…...
xAI Elasticsearch 集群架构解析:索引数据规模与分片优化实践
Elasticsearch(ES)作为分布式搜索和分析引擎,是 xAI 构建高性能数据处理系统的基石。xAI 的业务场景,如实时日志分析、模型训练数据检索和用户行为分析,要求 Elasticsearch 集群兼顾高吞吐写入、低延迟查询和动态扩展能…...
[c语言日寄]时间复杂度
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
快速幂(蓝桥杯)
1. 递归实现 递归方法通过将问题分解为更小的子问题来实现。具体步骤如下: 如果指数 b 为 0,返回 1。 如果 b 是偶数,则递归计算 (a^2)b/2。 如果 b 是奇数,则递归计算 a⋅(a^2)(b−1)/2。 伪代码: function fas…...
[Python基础速成]2-模块与包与OOP
上篇➡️[Python基础速成]1-Python规范与核心语法 目录 Python模块创建模块与导入属性__name__dir()函数标准模块 Python包类类的专有方法 对象继承多态 Python模块 Python 中的模块(Module)是一个包含 Python 定义和语句的文件,文件名就是模…...
Spring AOP 学习笔记 之 常用注解
0 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>3.4.2</version></dependency> 要在springboot中启用AOP,需要引入spring-boot-…...
JVM——运行时数据区
目录 Class装载到JVM的过程 装载(load)——查找和导入class文件 正文------------------- Run-time Data Areas 运行时数据区 Method Area 方法区 Heap 堆 Java Virtual Machine Stacks(Java虚拟机栈) The PC Register 程…...
Conda 入门指令教程
Conda 入门指令教程 Conda 是一个强大的包和环境管理工具,广泛应用于数据科学和机器学习项目中。本文将介绍 Conda 的常用指令,帮助你快速上手。 1. Conda 基础操作 查看 Conda 版本 conda --version显示当前安装的 Conda 版本。 更新 Conda conda…...
基于STM32、HAL库的MAX14830总线转UART驱动程序设计
一、简介: MAX14830是一款四通道UART扩展器,通过SPI或I2C接口与微控制器通信。主要特性包括: 4个独立的全双工UART通道 可编程波特率(最高达12Mbps) 每个通道有128字节的发送和接收FIFO 支持硬件和软件流控制 可配置的GPIO引脚 工作电压:1.7V至5.5V 低功耗模式 二、硬件…...
x-cmd install | jellex - 用 Python 语法在终端里玩转 JSON 数据!
目录 核心功能与特点安装优势亮点适用场景 还在为命令行下处理 JSON 数据烦恼吗?jellex 来了!它是一款基于终端的交互式 JSON 和 JSON Lines 数据处理工具,让你用熟悉的 Python 语法,轻松过滤、转换和探索 JSON 数据。 核心功能与…...
2025天梯赛 L2专项训练
L2-049 鱼与熊掌 - 团体程序设计天梯赛-练习集 思路就是模拟,正常写就完事 #include<bits/stdc.h> using namespace std; int main() {int a, b;cin >> a >> b;vector<vector<int>>arr(a, vector<int>(0));for (int i 0; i &…...
214、【数组】下一个排列(Python)
题目描述 原题链接:31. 下一个排列 思路 从后往前,找到第一个小于右侧集合的数,从右侧集合中找到一个比该数大的最小的数替换上去。 然后,将右侧集合从小到排列,就为当前排列中,下一个排列的数。 代码实…...
Why does Java‘s hashCode() in String use 31 as a multiplier?
HashCode 为什么使用 31 作为乘数? 1. 固定乘积 31 在这用到了2. 来自 stackoverflow 的回答3. Hash 值碰撞概率统计3.1 读取单词字典表3.2 Hash 计算函数3.3 Hash 碰撞概率计算封装碰撞统计信息的类3.4 针对一组乘数,分别计算碰撞率3.5 碰撞结果可视化3…...
如何将一个8s的接口优化到500ms以下
最近换了个工作,刚入职就接了个活--优化公司自营app的接口性能,提升用户体验。 刚开始还以为是1s优化到500ms这种,或者500ms优化到200ms的接口,感觉还挺有挑战的。下好app体验了一下。好家伙,那个慢已经超过了我的忍耐…...
如何保证本地缓存和redis的一致性
1. Cache Aside Pattern(旁路缓存模式) 核心思想:应用代码直接管理缓存与数据的同步,分为读写两个流程: 读取数据: 先查本地缓存(如 Guava Cache)。若本地未命中&…...
30天学Java第十天——反射机制
反射机制 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类的属性、方法和构造器等),并且可以操作这些信息。 反射机制在某些情况下非常有用,例如开发框架、库,或者需要进…...
Nodejs Express框架
参考:Node.js Express 框架 | 菜鸟教程 第一个 Express 框架实例 接下来我们使用 Express 框架来输出 "Hello World"。 以下实例中我们引入了 express 模块,并在客户端发起请求后,响应 "Hello World" 字符串。 创建 e…...
视频设备轨迹回放平台EasyCVR打造货运汽车安全互联网视频监控与管理方案
一、背景介绍 随着互联网发展,货运中介平台大量涌现,行业纠纷也随之增多。尽管当前平台APP具备录音和定位功能,但货物交易流程的全方位监控仍无法实现。主流跟踪定位服务大部分聚焦货物轨迹与车辆定位,尚未实现货物全程可视化监控…...
玩转Docker | 使用Docker部署Docmost文档管理系统
玩转Docker | 使用Docker部署Docmost文档管理系统 前言一、Docmost介绍Docmost 简介Docmost 特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Docmost服务下载镜像编辑部署文件创建容器检查容器状态检查服务端口安全设置四、访问Docmost服务访问Docmos…...
docker方式项目部署(安装容器组件+配置文件导入Nacos+dockerCompose文件创建管理多个容器+私有镜像仓库Harbor)
基于docker的部署 服务器主机ip 192.168.6.131 安装组件 安装redis docker pull redis:7.0.10#在宿主机上/var/lib/docker/volumes/redis-config/_data/目录下创建一个redis配置文件 vim redis.conf#内容如下 appendonly yes #开启持久化 port 6379 #requirepass 1234 #密码…...
基于OpenCV与PyTorch的智能相册分类器全栈实现教程
引言:为什么需要智能相册分类器? 在数字影像爆炸的时代,每个人的相册都存储着数千张未整理的照片。手动分类不仅耗时,还容易遗漏重要瞬间。本文将手把手教你构建一个基于深度学习的智能相册分类系统,实现:…...
C++中string库常用函数超详细解析与深度实践
目录 一、引言 二、基础准备:头文件与命名空间 三、string对象的创建与初始化(基础) 3.1 直接初始化 3.2 动态初始化(空字符串) 3.3 基于字符数组初始化 3.4 重复字符初始化 四、核心函数详解 4.1 字符串长度相关 4.1.1 …...