当前位置: 首页 > news >正文

数据结构4.0

大家好,今天是的知识点~

目录

一、栈的概念

1.0 栈的概念

2.0 概念区分

二、栈的方法 

1.0 MyStack方法:

2.0  将元素压入栈顶

3.0 移除并返回栈顶元素

4.0 返回栈顶元素但不移除

三、栈的题目

1.0括号匹配

2.0逆波兰表达式求值

3.0 出栈入栈次序匹配

4.0 最小栈

5.0 将递归转化为循环


一、栈的概念

1.0 栈的概念

如果将栈底当作 数组下标为0的元素 依此类推~

这样我们就能发现 其实栈的底层是一个数组

现实生活中的例子:羽毛球桶(只允许在固定的一端插入和删除)

2.0 概念区分

栈、虚拟机栈、栈帧有什么区别呢?

栈:数据结构里面的栈

虚拟机栈:内存当中的一块区域

栈帧:你每次调用这块方法的时候创建的一个区域

二、栈的方法 

peek  瞄一眼 就是瞄一眼栈 得到它的栈顶元素

pop    先返回栈顶元素 然后移除

下面我们开始自己模拟实现一遍,加深对栈的理解:

1.0 MyStack方法:

构造一个栈   栈的数据结构 底层是一个数组  说到数组又离不开uesdSize 

所以我们的代码是:

public class MyStack {private int[] elem;private int usedSize;private static final int DEFAULT_CAPACITY = 10;public MyStack ()  {this.elem=new int[DEFAULT_CAPACITY];}
}

2.0  将元素压入栈顶

首先还是要判断 我们的栈(数组)满了没有,如果满的话需要扩容

将元素压入栈顶代码就是elem[usedSize]=val;    usedSize++;(这个小更新经常容易被忘记)

public void push(int val){if(isFull()){elem= Arrays.copyOf(elem,2*elem.length);}this.elem[usedSize]=val;usedSize++;}
public boolean isFull(){return usedSize==elem.length;}

3.0 移除并返回栈顶元素

删除元素 首先看能不能删除 也就是说 要进行操作删除这个操作的对象有没有元素

所以我们第一步还是需要判断是否为空(和单链表删除方法想法类 :插入先看满了没有 删除先看是不是空呢

要返回栈顶元素:我们先把这个元素存起来  然后删除

int oldVal = elem[ usedSize -- 1];   usedSize --;

然后返回栈顶元素  return oldVal;

下面是代码:

 public int pop (){if(isEmpty()){throw new EmptyException();}int oldVal = elem[usedSize-1];usedSize--;return oldVal;}

4.0 返回栈顶元素但不移除

peek方法直接就是返回oldVal就可以啦  和pop方法有点类似

代码纯享:

public int peek(){if (isEmpty()){throw new EmptyException();}return elem[usedSize-1];}public boolean isEmpty(){return usedSize==0;}

和单链表和双链表还有顺序表对比 好简单哇

三、栈的题目

1.0括号匹配

20. 有效的括号 - 力扣(LeetCode)

如果我们没有学过栈这个数据结构的话,题目会变得很麻烦。这也是为什么数据结构是算法的基础。学习好数据结构,能为算法打下坚实的基础~

思路分析:

这道题重要的是顺序匹配 第一个右括号要和最后一个左括号匹配

不是说括号个数是偶数就一定匹配

为什么要用栈 栈的插入和删除复杂度是O(1) 对于这个题更合适

如果是链表   需要删除,相对于栈来说复杂度有点高了

利用的就是栈的特性 后进先出

我们可以先遍历一遍字符串  将所有的左括号放入栈里面

遇到右括号了开始消除 边遍历边消除

这时候会遇到各种情况:左括号和右括号不匹配  多出来的右面括号 多出来的左括号

对于peek和pop的使用 要知道   匹配上了才能用pop消除哦

注意:

左括号不匹配:左括号在栈里面没有被消除 多出来的左括号  我们用代码最后的是否empty来检验

右括号不匹配:此时栈是空的 但是右括号还有未被消除的  我们用else里面的

如果一上来就是右括号 所以需要判断是否栈为空那个代码

消除后看栈的空否

就是我们要理解题目 对于出现的各种情况都了解 知道怎么判断和应对 

甚至可以去把情况分类 对于这道题目:左括号开头 右括号开头  左括号个数大于右括号个数 

右面括号个数大于左括号  

下面是我的代码:

class Solution {public boolean isValid(String s) {Stack <Character> stack = new Stack();for(int i = 0;i<s.length();i++){char ch = s.charAt(i);if(ch=='(' || ch=='{' || ch=='['){//左括号入栈stack.push(ch);}else{//右括号不匹配//虽然右括号是和左括号匹配的 但是栈里面并不是一定有左括号的if(stack.empty()){return false;}char top = stack.peek();//此时top是从栈里面拿出来的左括号 ch是括号if(ch==')' && top=='(' || ch=='}' && top=='{' || ch==']' && top=='['){stack.pop();} else{//左括号不匹配return false;}}}  if(! stack.empty()){return false;}return true;
}
}

2.0逆波兰表达式求值

150. 逆波兰表达式求值 - 力扣(LeetCode)

思路分析:

(1)什么叫做逆波兰表达式:

1+2*5      中缀表达式  ---------->  后缀表达式 12+5*

后缀表达式的别名也叫做逆波兰表达式

(2)中缀表达式如何转换为后缀表达式:

一个快速的方式:拿到中缀表达式 从左到右 先加减后乘除 加括号

 用数字把字母代替回来

(3)逆波兰表达式的计算:

   如果大家看的比较迷糊的话:可惜这里不是视频 演示效果比较折扣

  i从1开始遍历那串后缀表达式  是数字 压入栈 此时栈里面有 1 2 3 遇到*号了

  弹出栈里面的两个元素  2和3 2*3=6 放回栈里面 此时栈里面的数字为 1 6 

以此类推

最后得到的结果在栈里面

 (这里的运算符都是双目运算符,靠近的两个,用到了栈的特点)

下面是图片展示:

 (4)代码实现:

一步一步来分析  把这道题拆解成小问题逐个击破   

我们根据上面的思路来进行翻译

过程: 遍历字符串 遇到是数字 压入栈 遇到是运算符号 出栈两个计算后压入栈 直到遍历结束

如何遍历字符串? 

使用for循环移动 for(int i = 0;i<字符串的长度;i++)   解决!

如何判断是数字还是运算符号?

不是数字就是符号 符号可以一个一个对比出来是不是 

if语句 if(s[ i ]== 加减乘除) { } else{  s.push(s[ i ])   } 不是符号,所以为数字 直接压入栈 解决!

如果遇到运算符号了呢?

出栈两个元素  然后运算 注意左右顺序  int a= s.pop(); 第一个出来的a为右操作数

int b = s.pop(); 左操作数    计算

如何直到自己遇到了哪个运算符号?

这里就想到了else if语句  然后之后的逻辑是 计算好了压入栈 

当然也可以用swiitch语句

综上-->代码纯享版:

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();for(int i = 0;i<tokens.length;i++){String token = tokens[i];if(token.equals("+")){int a = stack.pop();int b = stack.pop();int c = b+a;stack.push(c);}else if(token.equals("-")){int a = stack.pop();int b = stack.pop();int c = b-a;stack.push(c);}else if(token.equals("*")){int a = stack.pop();int b = stack.pop();int c = b*a;stack.push(c);}else if(token.equals("/")){int a = stack.pop();int b = stack.pop();int c = b/a;stack.push(c);}else{stack.push(Integer.parseInt(tokens[i]));}}return stack.peek();}
}

注意:

小问题:
对于Stack的创建
字符串类里面的知识:
首先是  i<tokens.length( )应该改为tokens.lenth 因为这里的tokens是一个字符串
其次  String token = tokens[i]; 这样得到的就是一个字符了
然后 token.equals("+")  equals() 是 Java 中用于比较两个对象内容是否相同的方法
最后:Integer.parseInt() 是 Java 中用于将字符串转换为整数的核心方法
这里的注意点说明我的字符串那节课没有认真听,之后复习复习

3.0 出栈入栈次序匹配

 栈的压入、弹出序列_牛客题霸_牛客网

这个题的难度不大 分析了思路之后把思路实现为代码就好

思路分析:

两个序列 一个是入栈序列 一个是出栈序列

 我们定义一个栈A  讲入栈序列一步一步放到里面

同时和出栈序列对比  如果匹配上了  那么从栈A里面弹出来 同时出栈序列遍历

如果最后入栈序列遍历完了 出栈序列也遍历完了 栈还是空的 

说明符合情况   返回true 

注意:

  我们要注意空指针异常和数组越界 分析同时遍历的两个数组

入栈数组的临界是空  那么我们的判断条件是 !stack.empty()

出栈数组的临界是满 那么我们的判断条件是 j<popV.length 

下面是代码:

import java.util.*;public class Solution {public boolean IsPopOrder (int[] pushV, int[] popV) {Stack <Integer> stack = new Stack<>();int j = 0;for(int i= 0;i < pushV.length;i++){stack.push(pushV[i]);while(!stack.empty() && j<popV.length&&stack.peek() == popV[j]){stack.pop();j++;}}return stack.empty();}
}

4.0 最小栈

155. 最小栈 - 力扣(LeetCode)

审清题目

思路分析:

这道题目的关键点是 要在O(1)时间内完成,也是题目的启发点

对于常数时间内的理解:

 什么是「常数时间」?

  • 定义:时间复杂度为 O(1),即无论栈中有多少元素(1个或100万个),获取最小值的操作耗时固定不变

  • 对比其他时间复杂度

    • O(1):固定时间(如数组按索引访问)

    • O(n):线性时间(如遍历链表查找)

    • O(log n):对数时间(如二分查找)

也就是说:

  • 时间复杂度不达标:遍历栈需要 O(n) 时间(n 为元素数量),违反题目要求的 O(1) 时间复杂度。

对于实现O(1)获取最小值 有两种经典方法: 一种是辅助栈同步记录 一种是 差值存储法

这个就是经验累积了

获取堆栈中的最小元素:

我们可以定义一个辅助栈 minStack 用来记录当前的最小值 如果发现新的比这个还小的最小值

我们及时的更新辅助栈,最后取辅助栈的栈顶元素 就是达到了O(1)的要求

注意:

(1)第一次放的时候 栈为空 这个时候元素都必须先放进去  

(2)平时要养成好的习惯

我们使用pop方法的时候 永远要先判断一下栈是否为空呢  单链表里面也一样 

执行删除单链表的时候 我们需要判断单链表是否为空

下面是代码:

class MinStack {private Stack<Integer> stack;private Stack<Integer> minStack;public MinStack() {stack = new Stack<>();minStack = new Stack<>();}public void push(int val) {//普通栈是正常放stack.push(val);if(minStack.empty()){minStack.push(val);}else{if(val<=minStack.peek()){minStack.push(val);}}}public void pop() {//以后记住 pop的必要前提都要先判断一下栈是不是空呢if(! stack.empty()){int ret = stack.pop();if(minStack.peek() == ret){minStack.pop();}}// if(stack.pop()==minStack.peek()){}//获取正常栈的栈顶元素public int top() {//又忘了前提是是否判断为空了if(stack.empty()){return -1;}return stack.peek();}public int getMin() {if(stack.empty()){return -1;}return minStack.peek();}
}

5.0 将递归转化为循环

逆序打印链表

递归、逆序

递归  递和归  

我们把过程结果依此放入栈 最后拿出来就是逆序的    就是这个道理

循环走完了  节点都放到栈里面了  我们开始弹出 一直弹到栈为空

粗略图看一下 水印没有弄好  补药嫌弃哇哈哈

示例代码:

public void reversePrintList(){Stack<ListNode> stack = new Stack<>();ListNode cur = head;while(cur != null){stack.push(cur);cur=cur.next;}while(!stack.isEmpty()){ListNode top = stack.pop();System.out.println(top.val);}}

这样,我们就利用了栈的特点实现了逆序 

感谢大家的支持

更多内容还在加载中...........

如有问题欢迎批评指正,祝大家五一快乐!!!

相关文章:

数据结构4.0

大家好&#xff0c;今天是栈的知识点~ 目录 一、栈的概念 1.0 栈的概念 2.0 概念区分 二、栈的方法 1.0 MyStack方法&#xff1a; 2.0 将元素压入栈顶 3.0 移除并返回栈顶元素 4.0 返回栈顶元素但不移除 三、栈的题目 1.0括号匹配 2.0逆波兰表达式求值 3.0 出栈…...

SMT贴片检验标准核心要点与实施规范

内容概要 SMT贴片检验标准是确保电子产品组装质量的核心框架&#xff0c;其核心要点覆盖从原材料到成品的全流程工艺控制。该标准体系以焊点质量、元件定位精度及锡膏印刷检测为技术基线&#xff0c;结合IPC-A-610电子组装验收规范&#xff0c;对PCBA加工中的缺陷类型、判定阈…...

探索 C++23 std::to_underlying:枚举底层值获取的利器

文章目录 引言基本概念作用使用示例与之前方法的对比在 C23 中的意义总结 引言 在 C 的发展历程中&#xff0c;每一个新版本都带来了许多令人期待的新特性和改进&#xff0c;以提升代码的安全性、可读性和可维护性。C23 作为其中的一个重要版本&#xff0c;也不例外。其中&…...

PyTorch学习之张量(Tensor)(一)

1. 张量的基本概念 1.1. 定义与特性 张量是PyTorch中最基础的数据结构&#xff0c;可视为多维数组的泛化形式&#xff0c;支持标量&#xff08;0维&#xff09;、向量&#xff08;1维&#xff09;、矩阵&#xff08;2维&#xff09;及更高维度的数据存储。其核心特性包括&…...

理解数学概念——支集(支持)(support)

1. 支集(support)的定义 在数学中&#xff0c;一个实函数 f 的支集(support)是函数的不被映射到 0 的元素域(即定义域)的子集。若 f 的(定义)域(domain)是一个拓扑空间(即符合拓扑的集合)&#xff0c;则 f 的支集则定义为包含( f 的元素域中)不被映射到0的所有点之最小闭集…...

Python 部分内置函数及其用法详解

在 Python 编程的世界里&#xff0c;内置函数是我们强大的 “工具箱”&#xff0c;它们提供了丰富而便捷的功能&#xff0c;帮助我们高效地完成各种任务。本文将带你深入了解这些常用内置函数及其用法&#xff0c;通过简单易懂的实例&#xff0c;让你轻松掌握它们。 一、数据类…...

[蓝桥杯真题题目及解析]2025年C++b组

移动距离&#xff08;填空&#xff09;** 小明初始在二维平面的原点&#xff0c;他想前往坐标 (233,666)。在移动过程中&#xff0c;他只能采用以下两种移动方式&#xff0c;并且这两种移动方式可以交替、不限次数地使用&#xff1a; 水平向右移动&#xff0c;即沿着 x 轴正方…...

yolov5 train笔记4 roboflow

How to Train a YOLOv5 Model On a Custom Dataset Sign in to Roboflow https://www.youtube.com/watch?vr3Ke7ZEh2Qo 他的ai懂中文的 还是得训练&#xff0c;明天再搞 https://www.youtube.com/watch?vEmYCpbFQ5wo&t2s 很香但是我没有马内...

工作记录 2015-06-01

工作记录 2015-06-01 序号 工作 相关人员 1 修改了FnetFax 修改了iConverter 修改了iCDA 郝 FNSR识别引擎 统计了最近几个星期0223医院的打字和录音的时间比。上周的比值是3.42&#xff0c;是近8个星期中最低的值。和05/03/2015 - 05/09/2015的3.74相比&#xff0c;下降…...

创意Python爱心代码分享

在代码的世界里&#xff0c;程序员以独特方式书写浪漫。他们精心打造的一个个 demo&#xff0c;宛如熠熠星辰。这些 demo 不仅是技术结晶&#xff0c;更饱含对编程的热爱与执着。从简洁的算法示例到复杂的系统雏形&#xff0c;每一行代码都凝聚着思考与智慧。它们被无私分享&am…...

【RAG】向量?知识库的底层原理:向量数据库の技术鉴赏 | HNSW(导航小世界)、LSH、K-means

一、向量化表示的核心概念 1.1 特征空间与向量表示 多维特征表示&#xff1a;通过多个特征维度&#xff08;如体型、毛发长度、鼻子长短等&#xff09;描述对象&#xff0c;每个对象对应高维空间中的一个坐标点&#xff0c;来表示狗这个对象&#xff0c;这样可以区分出不同种…...

降维大合集

1. 主成分分析&#xff08;PCA&#xff0c;Principal Component Analysis&#xff09; 基本原理 PCA 是一种线性降维方法&#xff0c;其核心思想是&#xff1a; 找到数据中方差最大的方向&#xff08;称为主成分&#xff09;&#xff0c;并将数据投影到这些方向上。 利用正交变…...

AWS上构建基于自然语言和LINDO API的线性规划与非线性规划的优化计算系统

我想要实现一个通过使用C#、Semantic Kernel库、OpenAI GPT 4的API和附件文档里提到的LINDO API 15.0实现通过中文自然语言提示词中包含LATEX代码输入到系统&#xff0c;通过LINDO API 15.0线性规划与非线性规划的优化计算程序输出计算结果和必要步骤的应用&#xff0c;结果用中…...

26考研 | 王道 | 计算机网络 | 第三章 数据链路层

26考研 | 王道 | 第三章 数据链路层 数据链路层所处的地位 数据链路层 使用 物理层 提供的“比特传输”服务数据链路层 为 网络层 提供服务&#xff0c;将网络层的 IP数据报&#xff08;分组&#xff09;封装成帧&#xff0c;传输给下一个相邻结点物理链路&#xff1a;传输介质…...

学习黑客资产威胁分析贴

第一天作业&#xff1a; 完成作业奖励&#xff1a; &#x1f381; 奖励 1 ── Week 2《Web 渗透手册》预览 Day主题关键目标练手靶场 / 工具1HTTP 基础 & Burp 入门抓包、改包、重放PortSwigger Academy&#xff1a;“HTTP basics”2SQL 注入原理手工注入 sqlmapDVWA →…...

CSS元素动画篇:基于当前位置的变换动画(合集篇)

CSS元素动画篇&#xff1a;基于当前位置的变换动画&#xff08;合集篇&#xff09; 前言位移效果类元素动画水平抖动效果效果预览代码实现 垂直抖动效果效果预览代码实现 摇头动画效果效果预览代码实现 点头动画效果效果预览代码实现 旋转效果类元素动画摇摆动画效果效果预览代…...

Spring 容器相关的核心注解​

以下是 Spring 容器中用于 ​​Bean 管理、依赖注入、配置控制​​ 的关键注解&#xff0c;按功能分类说明&#xff1a; ​​1. Bean 声明与注册​​ 注解作用示例​​Component​​通用注解&#xff0c;标记一个类为 Spring Bean&#xff08;自动扫描注册&#xff09; Compo…...

经典算法 最小生成树(prim算法)

最小生成树 题目描述 给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 求最小生成树的树边权重之和。如果最小生成树不存在&#xff0c;则输出 impossible。 给定一张边带权的无向图 G (V, E)&#xff0c;其中&#xff1a…...

机器学习中的分类和回归问题

1. 分类问题 机器学习中的分类问题是一种监督学习任务&#xff0c;其核心目标是将数据样本分配到预定义的离散类别中&#xff0c;例如判断邮件是否为垃圾邮件、识别图像中的物体类型等。 分类通过已知标签的训练数据&#xff08;如带类别标注的样本&#xff09;学习特征与类别…...

pip命令

安装&卸载 -- 安装numpy pip install numpy1.26.4 -- 从索引安装&#xff08;自定义源&#xff09; pip install package_name --index-url https://custom_url -- 安装本地文件或目录 pip install /path/to/package.whl pip install D:\Downloads\transformers-4.40.0-py…...

n8n工作流自动化平台的实操:Cannot find module ‘iconv-lite‘

解决问题&#xff1a; 1.在可视化界面&#xff0c;执行const iconv require(iconv-lite);&#xff0c;报Cannot find module iconv-lite [line 2]错误&#xff1b; 查看module的路径 进入docker容器 #docker exec -it n8n /bin/sh 构建一个test.js,并写入如何代码 vi tes…...

AIGC时代——语义化AI驱动器:提示词的未来图景与技术深潜

文章目录 一、技术范式重构&#xff1a;从指令集到语义认知网络1.1 多模态语义解析器的进化路径1.2 提示词工程的认知分层 二、交互革命&#xff1a;从提示词到意图理解2.1 自然语言交互的认知进化2.2 专业领域的认知增强 三、未来技术图谱&#xff1a;2025-2030演进路线3.1 20…...

基于Springboot高校网上缴费综合务系统【附源码】

基于Springboot高校网上缴费综合务系统 效果如下&#xff1a; 系统登陆页面 个人中心页面 论坛交流页面 发表评论页面 付款页面 教师缴费页面 新增缴费类型页面 审核页面 研究背景 随着高校信息化建设进程的加速&#xff0c;传统手工缴费模式因效率低、错误率高、管理成本高…...

返回倒数第k个节点题解

这题要用到快慢指针的思想。 1.定义两个指针&#xff0c;一个快指针&#xff0c;一个慢指针&#xff0c;初始都指向头结点 2.先让快指针往后走k步&#xff0c;也就是移动k个节点&#xff0c;这个时候快指针比慢指针领先k 3.现在让快慢指针同时往后移动&#xff0c;两指针之间…...

《操作系统精髓与设计原理》第4章课后题答案-线程、对称多处理器和微内核

1.表3.5列出了在一个没有线程的操作系统中进程控制块的基本元素。对于多线程系统&#xff0c;这些元素中哪些可能属于线程控制块&#xff0c;哪些可能属于进程控制块&#xff1f; 对于不同的系统来说通常是不同的&#xff0c;但一般来说&#xff0c;进程是资源的所有者&#xf…...

《ATPL地面培训教材13:飞行原理》——第4章:亚音速气流

翻译&#xff1a;刘远贺&#xff1b;工具&#xff1a;Cursor & Claude 3.7&#xff1b;过程稿 第4章&#xff1a;亚音速气流 目录 翼型术语气流基础二维气流总结习题答案 翼型术语 翼型 一种能够以较高效率产生升力的特殊形状。 弦线 连接翼型前缘和后缘曲率中心的直…...

5月3日星期六今日早报简报微语报早读

5月3日星期六&#xff0c;农历四月初六&#xff0c;早报#微语早读。 1、五一假期多地政府食堂对外开放&#xff1a;部分机关食堂饭菜“秒没”&#xff1b; 2、2025年五一档电影新片票房破3亿&#xff1b; 3、首日5金&#xff01;中国队夺得跳水世界杯总决赛混合团体冠军&…...

2024 虚拟电厂与大电网三道防线的关系探讨【附全文阅读】

本文围绕虚拟电厂与大电网三道防线展开探讨。大电网三道防线包括第一道防线的预防性控制和继电保护、第二道防线的稳控系统、第三道防线的失步解列及频率电压紧急控制装置 &#xff0c;新型电力系统建设对第三道防线带来频率稳定等挑战。当前新型配电网第三道防线建设存在问题&…...

【c++】模板详解

目录 泛型编程模板的使用函数模板函数模板的本质函数模板的实例化显式实例化隐式实例化 函数模板的模板参数的匹配原则 类模板类模板的本质类模板的实例化 非类型模板参数模板特化函数模板特化类模板特化类模板全特化类模板偏特化&#xff08;半特化&#xff09; 模板分离编译t…...

【Linux】驱动开发方法

使用Petalinux学习驱动开发时的一些经验。 部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 基础——字符设备驱动 1.1 分配设备号(驱动入口使用)…...

BUUCTF——禁止套娃

BUUCTF——禁止套娃 进入靶场 一个近乎空白的页面 看一下框架 没什么有用的信息&#xff0c;扫个目录吧 只扫出来给flag.php&#xff0c;但是0B&#xff0c;估计又是个空网站 拼接访问一下 果然又是什么都没有 没有突破口 githack找找看看也没有源码吧 <?php include …...

Spring MVC @RequestBody 注解怎么用?接收什么格式的数据?

RequestBody 注解的作用 RequestBody 将方法上的参数绑定到 HTTP 请求的 Body&#xff08;请求体&#xff09;的内容上。 当客户端发送一个包含数据的请求体&#xff08;通常在 POST, PUT, PATCH 请求中&#xff09;时&#xff0c;RequestBody 告诉 Spring MVC 读取这个请求体…...

线性DP(动态规划)

线性DP的概念&#xff08;视频&#xff09; 学习线性DP之前&#xff0c;请确保已经对递推有所了解。 一、概念 1、动态规划 不要去看网上的各种概念&#xff0c;什么无后效性&#xff0c;什么空间换时间&#xff0c;会越看越晕。从做题的角度去理解就好了&#xff0c;动态规划…...

Qt中实现工厂模式

在Qt中实现工厂模式可以通过多种方式&#xff0c;具体选择取决于需求和场景。以下是几种常见的实现方法&#xff1a; 1. 简单工厂模式通过一个工厂类根据参数创建不同对象。cppclass Shape {public: virtual void draw() 0; virtual ~Shape() default;};class Circle : publ…...

基于 Dify + vLLM插件 + Qwen3 构建问答机器人Docker版

前提条件 硬件要求&#xff1a; 推荐 NVIDIA GPU (至少 16GB 显存&#xff0c;Qwen3 可能需要更多) 至少 32GB 内存 足够的存储空间 (Qwen3 模型文件较大) 软件要求&#xff1a; Docker 和 Docker Compose Python 3.8 CUDA 和 cuDNN (与你的 GPU 兼容的版本) 安装步骤…...

【Linux】Linux应用开发小经验

基于Petalinux工具链的Linux应用开发小经验&#xff0c;未完待续... 部分图片和经验来源于网络&#xff0c;若有侵权麻烦联系我删除&#xff0c;主要是做笔记的时候忘记写来源了&#xff0c;做完笔记很久才写博客。 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录…...

第39课 绘制原理图——绘制命令在哪里?

绘制原理图符号的命令在哪里&#xff1f; 在新建完原理图之后&#xff0c;我们就可以在原理图上绘制各种相关的符号了。 我们基本会从以下的两个地方&#xff0c;找到绘制各种符号的命令&#xff1a; 菜单栏中的“放置”菜单&#xff1b; 悬浮于设计窗口中的快速工具条 在初…...

第十四篇:系统分析师第三遍——15章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结六、后面准备怎么做&#xff1f; 一、目标 通过参加考试&#xff0c;训练学习能力&#xff0c;而非单纯以拿证为目的。 1.在复习过程中&…...

市面上所有大模型apikey获取指南(持续更新中)

阿里云(千问) 官方文档&#xff1a; 百炼控制台 1. 登录百炼控制台 2.前往我的api页面百炼控制台 3.创建api4. 添加描述&#xff08;用于aichat&#xff09; Deepseek 官方文档&#xff1a;首次调用 API | DeepSeek API Docs 1. 登录api平台 DeepSeek 开放平台 2. Deep…...

Java框架“若依RuoYi”前后端分离部署

运行环境 Eclipse IDE for Enterprise Java and Web Developers 下载Eclipse解压Eclipse到文件夹 Maven 下载Maven解压Maven到文件夹配置环境变量MAVEN_HOME为Maven安装位置配置环境变量path为%MAVEN_HOME%\bin Redis 下载Redis解压Redis到文件夹配置环境变量path为Redis安装位…...

计网_可靠传输ARQ机制

2024.09.04&#xff1a;网工老姜&beokayy网工学习笔记 第5节 可靠传输机制 5.1 可靠传输5.2 ARQ机制、ARQ协议5.3 ARQ简介&#xff08;可靠传输&#xff09;5.3.1 停止等待协议&#xff08;1&#xff09;无差错情况&#xff08;2&#xff09;有差错情况确认丢失确认迟到 5.…...

实验-组合电路设计1-全加器和加法器(数字逻辑)

目录 一、实验内容 二、实验步骤 2.1 全加器的设计 2.2 加法器的设计 三、调试过程 3.1 全加器调试过程 2.加法器的调试过程 四、实验使用环境 五、实验小结和思考 一、实验内容 a) 介绍 在这次实验中&#xff0c;你将熟悉 Logisim 的操作流程&#xff0c;并且学习…...

软件管理(安装方式)

1.rpm安装 1.1.rpm介绍 rpm软件包名称: 软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律 举例:openssh-6.6.1p1-31.el7.x86_64.rpm 数字是版本号:第一位主版本号,第二位次版本号,带横杠的是修订号, el几---操作系统的版本。 #用rpm安装需要考虑如下信…...

工作记录 2015-07-15

工作记录 2015-07-15 序号 工作 相关人员 1 在CDAEditor上增加签名的处理&#xff0c;已经基本改完。明天整理说明文档&#xff0c;更新193服务器。 郝 需要改了签名的处理 增加了签名的按钮&#xff1a; 已经签名过的会有提示&#xff1a; 签名后PDF的预览如下&#xf…...

《算法导论(第4版)》阅读笔记:p4-p5

《算法导论(第4版)》学习第 3 天&#xff0c;p4-p5 总结&#xff0c;总计 2 页。 一、技术总结 1.instance Thus, given the input sequence h31; 41; 59; 26; 41; 58i, a correct sorting algorithm returns as output the sequence h26; 31; 41; 41; 58; 59i. Such an inp…...

【Mytais系列】Update语句执行流程

以下是通过 时序图 和 文字说明 详细描述的 MyBatis 执行 UPDATE/INSERT/DELETE 语句的完整流程&#xff0c;包括缓存清理、事务提交和数据库操作的各个环节&#xff1a; 时序图&#xff08;Sequence Diagram&#xff09; 详细执行流程解析 1. 客户端发起更新请求 客户端调用…...

LeetCode —— 145. 二叉树的后序遍历

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…...

Python函数参数机制深度解析与最佳实践

引言 在Python开发中&#xff0c;函数的参数机制是构建灵活、可维护代码的核心要素。本文将通过7个关键维度深入剖析函数参数的底层原理与高级用法&#xff0c;结合代码实例揭示参数传递的本质规律&#xff0c;助您掌握工业级函数设计技巧&#xff08;基于Python 3.12环境验证…...

ARM 算数指令

加法 ADD 减法 SUB 取负 NEG 比较 CMP 乘法 MUL 移位 LSL、LSR、ASL、ASR、ROL、ROR加法和减法 绝大多数微处理器都实现了带进位的加法指令&#xff0c;能够将两个操作数和条件码寄存器中的进位位加到一起。这条指令会使字长大于计算机固有字长的链接运算更加方便。 说明了如何…...

普通IT的股票交易成长史--20250502 突破(2)

声明&#xff1a;本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。文中观点基本来自yt站方方土priceaction&#xff0c;综合自己的观点得出。感谢他们的无私分享。 送给自己的话&#xff1a; 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#…...