- 博客(17)
- 收藏
- 关注
原创 栈与队列学习笔记+LeetCode150+LeetCode1047+加分项
遇到需要舍弃的元素,慢指针停留不动,仅快指针继续前进。快慢指针是双指针算法里的一类,在同一个线性结构(数组、单链表)中定义两个移动步长不同的指针,利用两个指针不同的前进速度,一趟遍历完成问题求解。遇到运算符,弹出栈顶两个数做运算,先弹出来的是右操作数b,后弹出的是左操作数a,运算结果压回栈。否则(优先级低于或等于)→ 栈顶出栈送入后缀表达式,继续比较,直到栈空或栈顶优先级低于当前操作符,再将当前操作符入栈。仅需单次遍历,时间复杂度 O(n),原地操作,额外空间O(1),不需要新建数组存储结果。
2026-09-09 10:18:34
170
原创 栈与队列笔记+LeetCode 三道习题+加分项
例如 C 选项 dceab:先 d 进栈,然后 c 进栈,此时若出栈可得 d、c,但后续要求 a、b 连续出栈,而 a、b 在栈底,不可能在 c 之后立即输出 a、b(因为中间还隔着 c 和 d 已出栈,栈底是 b、a,但顺序不对)。普通顺序队列存在假溢出问题:数组前面已经出队腾出空间,但 rear 指针走到数组末尾,就不能再入队,明明数组有空位却报队列满。循环队列:把顺序队列的数组看成环形,头尾指针到达数组末尾后折返到数组下标0的位置,充分利用数组空间,解决假溢出。再弹出输出栈栈顶,就是队列队首元素。
2026-09-08 10:19:58
213
原创 递归与链表学习笔记+leetcode206+leetcode24
保存cur后面的链表。pre = None :反转之后,原来第一个节点会变成最后一个节点,最后一个节点的next必须是 None ,所以pre初始赋值None。temp2 = cur.next.next.next :保存下一组的开头,交换会覆盖next,必须提前存,防止链表丢失。return pre :循环结束,cur是None,pre停在原链表最后一个结点,也就是反转链表的头结点,直接返回。1.temp = cur.next :先保存cur原本的下一个节点,防止链表断掉,后续找不到后面的结点。
2026-09-04 10:17:17
153
原创 链表算法+leetcode203+leetcode707
由于要删除的结点可能包括头结点,因此通常引入虚拟头结点(dummy node),将其放在真正头结点之前,这样可以统一处理所有删除情况,避免对头结点的特殊判断。需要找到索引为 n-1 的结点(前驱),然后让其 next 跳过待删除结点,指向待删除结点的下一个结点。使用两个指针(或一个指针加一个前驱指针)遍历链表,当发现当前结点值等于 val 时,让前驱结点的 next跳过当前结点,直接指向下一个结点。问题描述:给定一个链表和一个目标值 val,删除链表中所有值等于 val的结点,返回删除后的链表头。
2026-09-02 22:08:40
214
原创 数组算法笔记+力扣三道题
当我们说删除数组中的某个元素时,实际是将该元素后面的所有元素依次向前移动一位,覆盖掉待删除的元素,同时数组的有效长度减一。最直观的思路是遍历数组,每当遇到目标值时,将该元素之后的所有元素依次向前平移一位,并减小数组的有效长度。给定一个数组和一个目标值,要求原地移除所有等于该值的元素,并返回移除后数组的新长度。给定一个正整数数组和一个目标值,找出数组中满足其和大于等于目标值的长度最小的连续子数组,并返回其长度。平方后的最大值一定出现在数组的两端——要么是最左侧的负数平方,要么是最右侧的正数平方。
2026-09-02 09:36:19
224
原创 数据结构基本介绍+数组基本概念+leetcode704题解
它不单是把数据堆放在一起,而是研究数据之间存在的逻辑关系、数据在计算机内存中的物理存储形式,以及如何对这些数据进行高效操作(增、删、改、查等等)。数据元素不是孤立存在,元素之间的相互关系,就是结构。数组最大特性:随机访问(随机存取),已知首地址,可以直接算出任意元素地址,不需要遍历前面元素。2. 元素移动:把下标 i+1 直到末尾所有元素,整体向左移动一位,覆盖被删除位置。结构:数据元素之间的邻接/逻辑关系(元素怎么组织、怎么相连)数据:一个个独立的数据元素(可以理解成数据“素材”)
2026-09-01 10:10:06
211
原创 使用结构化命令/更多的结构化命令
文件比较:涵盖文件是否存在(-e)、是否为目录(-d)、是否为普通文件(-f)、是否可读/写/执行(-r/-w/-x)、是否非空(-s)、属主或属组判断,以及新旧比较(-nt/-ot)等。=)、按字典序大小(< 和 >,但需转义以防被 shell 解释为重定向符号),以及检查字符串长度是否非零(-n)或为零(-z)。数值比较:如等于(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、不等于(-ne)等。在 Shell 脚本中,结构化命令用于控制命令的执行流程,使脚本能够根据条件做出不同响应。
2026-07-10 09:11:53
225
原创 加分练习(警察和土匪游戏)
• jack 创建一个文件 123.txt,自己可以读写,本组人可以读,其它组没有任何权限。• jack 修改该文件,让其它组人可以读,本组人可以读写。• 如果无法读写,请修改相应权限,让 xh 可以读写该文件。• xh 投靠警察,测试,看看是否可以读写,为什么?题目要求:police , bandit。jack, jerry: 警察。xh, xq: 土匪。
2026-07-09 11:16:06
199
原创 第九次作业(构建基本脚本)
常见的退出状态码含义包括:1 表示一般性未知错误,126 表示命令不可执行,127 表示命令未找到,130 表示被 Ctrl+C 终止等。理解这些概念后,我们已经能够写出具有一定功能的自动化脚本,例如带提示信息的用户管理脚本、带时间戳的日志备份脚本等。使用时需指定一个文本标记来标识数据的开始和结束,标记可以任意字符串,但首尾必须一致。)解决了将一个命令的输出直接传给另一个命令作为输入的问题。值得一提的是,变量的值是可以随时修改的,甚至可以用一个变量去赋值另一个变量,这为脚本中的数据处理提供了很大的灵活性。
2026-07-09 09:06:38
222
原创 第八次作业(使用编辑器)
老师还提到了几个常用命令:`Ctrl+C` 显示光标位置,`Ctrl+G` 打开帮助窗口,`Ctrl+K` 剪切当前行,`Ctrl+U` 粘贴,`Ctrl+R` 读入另一个文件,`Ctrl+T` 拼写检查,`Ctrl+V` 和 `Ctrl+Y` 分别下翻和上翻一页。老师提到除了按 `i` 进入插入,还可以用 `I` 跳到行首插入,`a` 在光标后插入,`A` 在行尾插入,`o` 在下一行新开一行插入,`O` 在上一行插入。比如按 `j` 是向下移动光标,按 `d` 是删除,等等。
2026-07-08 15:44:18
174
原创 第七次作业(理解Linux文件权限)
每个进入系统的用户都有唯一账户,系统通过UID(用户ID)来跟踪权限,而登录时使用的是登录名(最长8字符,可含字母数字,关联密码)。**后9个字符**:分为三组,每组3位,分别代表**属主(u)**、**属组(g)**、**其他用户(o)** 的权限。-特殊权限:`X`(对目录或已有执行权限的文件赋予执行权限)、`s`(设置UID/GID)、`t`(粘滞位)等。默认只删除 `/etc/passwd` 和 `/etc/shadow` 中的信息,**不删除**用户文件。`-g` 则修改默认组。
2026-07-08 11:54:48
223
原创 第六次作业(Linux环境变量)
只有通过 export 将变量导出为环境变量,父shell的变量才会被子shell继承,但子shell对继承来的环境变量做的修改,依然不会影响父shell。关键点:在子shell里改全局变量的值,父shell不受影响。原因:子shell是独立的进程,它的局部变量生命周期只随子shell进程结束而销毁,完全不会向上反馈给父shell。分两类:全局变量对所有shell会话和子shell可见,局部变量只在创建它的那个shell里有效。在子shell里unset只影响子shell自己的,父shell不受影响。
2026-07-07 12:02:34
242
原创 第五次作业(理解Shell)
在这个 Shell 中新建的 Shell 程序,都是它的子 Shell。cat ~/.bash_history :只能看到上一次关闭终端前保存的旧命令,本次会话刚执行的新命令不会出现在文件里。2.此时 cat ~/.bash_history 展示的命令内容,和 history 列出的命令基本完全一致;5. alias 别名仅在当前 Shell 有效,子 Shell 无法继承父 Shell 临时定义的别名。用于简化长命令,仅在当前 Shell 会话中生效,新建 Shell 会话后失效。
2026-07-03 22:09:53
187
原创 第四次作业(学习更多bass shell 的命令)
本节课核心分为五大模块:进程管理、磁盘空间管理、磁盘挂载卸载、数据文件处理、文件归档压缩,覆盖系统运维最常用基础命令,用于监控系统状态、管理存储、批量处理文本、打包备份文件。仅显示当前终端运行进程,输出三列:PID(进程ID)、TTY(终端)、TIME(占用CPU时长)、CMD(程序名)1.头部系统总览- 第一行:当前时间、开机时长、登录用户、1/5/15分钟系统平均负载(数值越高负载越重)输出内容:分区设备名、总大小、已用、可用、使用率、挂载点,快速定位满盘分区。
2026-07-02 15:22:11
163
原创 第三次作业(Shell的基础知识和常用命令)
1.Shell 与命令行界面 (CLI)- Shell是用户与Linux内核交互的桥梁,提供文本命令行界面(CLI)。6. 链接 (Links)- 硬链接 ( ln ): 允许一个文件拥有多个路径,本质上是同一个文件。符号链接/软链接 ( ln -s ): 类似于Windows的快捷方式,是一个指向原文件的特殊文件。1.虚拟目录- Linux采用单一的虚拟目录结构,所有文件和目录都从根目录 / 开始。1.file - 确定文件的类型,如ASCII文本、目录、符号链接等。
2026-07-02 14:09:10
211
原创 第二次作业
3. 日常使用逻辑:遇到陌生Linux指令,直接执行 man 指令名 ,就能查看官方完整用法、参数、案例,是学习Linux最基础的查询手段;VirtualBox选中Ubuntu虚拟机→设置→网络,连接方式改为网络地址转换(NAT),点击高级,打开端口转发,设置主机端口2222、子系统端口22。4. 双击保存的会话进行连接,弹出主机密钥弹窗,选择接受并保存,即可成功登录Ubuntu远程终端,远程执行所有Linux命令。6. 底部操作提示:空格向下翻页、上下箭头滚动文字、按下 q 键退出手册页面,回到终端。
2026-06-30 20:57:44
159
原创 第一次作业
(我一直卡在“正在复制文件”界面,你可以试试在安装前断掉网络 )如果界面显示不全,导致“继续”按钮被遮挡,您可以按键盘上的Alt+F7组合键,然后用鼠标左键拖动窗口,就能把按钮露出来。选中它,点击“设置”按钮。在“系统”选项卡中,将系统里面的软驱关掉,网络连接方式改为桥接网卡,最重要的操作在“存储”选项卡:点击控制器下面的光盘图标,在属性中选择“选择虚拟盘”,然后找到刚才下载的Ubuntu ISO文件并加载。并按回车,它会列出当前目录下所有文件和文件夹的详细信息,包括权限、所有者、大小和修改时间等。
2026-06-30 19:54:25
288
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅