- 博客(54)
- 收藏
- 关注
原创 Wan-本科阶段部分作品
1、简易无接触温度测量与身份识别装置(电赛 省一)2、基于交叉带式分拣结构的智能垃圾分类系统(工训赛 省二)3、基于STM32的智能语音风扇(大创优秀结题)
2024-08-22 18:15:14
347
原创 40. 单调栈, 739.每日温度,496.下一个更大元素 I,503.下一个更大元素II ,42.接雨水,84.柱状图中最大的矩形
因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。时间复杂度为O(n)。
2024-08-07 16:21:07
244
原创 S02. 手写x86操作系统--内核实现(更新中)
在CPU中运行的是指令,故而代码段猫述符中的DPL,便是当前CPU所处的特权级,这个特权级称为当前特权级,即CPL(Current Privilege Level),它表示处理器正在执行的代码的特权级别。当处理器特权级检查的条件通过后,新代码段的DPL就变成了处理器的CPL,并且且标代码段描述符的DPL将保存在代码段寄存器CS中的RPL位。注意,只是代码段寄存器CS中的RPL是CPL,其他段寄存器中选择子的RPL与CPL无关。在任意时刻,当前特权级CPL保存在CS选择子中的RPL部分。
2024-08-06 16:29:29
1739
原创 38. 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离,编辑距离总结篇
【代码】38. 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离,编辑距离总结篇。
2024-08-06 13:03:07
836
原创 37. 1143.最长公共子序列 ,1035.不相交的线,53. 最大子序和,392.判断子序列
t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1]。if (s[i - 1] == t[j - 1]),那么dp[i][j] = dp[i - 1][j - 1] + 1;从递推公式可以看出dp[i][j]都是依赖于dp[i - 1][j - 1] 和 dp[i][j - 1],所以dp[0][0]和dp[i][0]是一定要初始化的。
2024-08-06 10:40:19
661
原创 36. 674. 最长连续递增序列 ,300.最长递增子序列,718. 最长重复子数组
【代码】36. 674. 最长连续递增序列 ,300.最长递增子序列,718. 最长重复子数组。
2024-08-05 21:28:47
227
原创 35. 121. 买卖股票的最佳时机 ,122.买卖股票的最佳时机II,123.买卖股票的最佳时机III
【代码】35. 121. 买卖股票的最佳时机 ,122.买卖股票的最佳时机II,123.买卖股票的最佳时机III。
2024-08-05 20:35:08
196
原创 34. 198.打家劫舍,213.打家劫舍II, 337.打家劫舍III
在上面的方法中,对一个节点 偷与不偷得到的最大金钱都没有做记录,而是需要实时计算。而动态规划其实就是使用状态转移容器来记录状态的变化,这里可以使用一个长度为2的数组,记录当前节点偷与不偷所得到的的最大金钱。以下代码超时了,这个递归的过程中其实是有重复计算了,算了root的四个孙子(左右孩子的孩子)为头结点的子树的情况,又计算了root的左右孩子为头结点的子树的情况,计算左右孩子的时候其实又把孙子计算了一遍。
2024-08-05 19:59:44
349
原创 S01. 手写x86操作系统--引导程序和加载器load的实现
x86在上电启动后自动进入实模式,即16位工作模式,这种模式是最早期的8086芯片所使用的工作模式。早期的芯片设计得较简单、工作模式也较简单,所以有诸多限制: 在后续的芯片设计中,intel为处理器增加了一些新的功能,可以实现某些保护功能,即保护模式。具体的特点如下:在80386及其后续处理器的保护模式下,段描述符是一个8字节(64位)的数据结构,用于定义内存段的基址、限长和访问权限等信息。以下是段描述符的结构及各字段的详细作用。 x86访问内存的机制是“段基址 : 偏移地址”,无论是实模式,还是保护模式
2024-07-21 11:11:44
728
原创 33. 322.零钱兑换,279.完全平方数,139.单词拆分,关于多重背包,你该了解这些!,背包问题总结篇!
代码随想录 (programmercarl.com)
2024-07-13 12:12:40
287
原创 32. 完全背包, 518.零钱兑换 II, 377.组合总和 Ⅳ,70.爬楼梯 (进阶)
如果把遍历nums(物品)放在外循环,遍历target的作为内循环的话,举一个例子:计算dp[4]的时候,结果集只有 {1,3} 这样的集合,不会有{3,1}这样的集合,因为nums遍历放在外层,3只能出现在1后面!我们知道01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次,而完全背包的物品是可以添加多次的,所以要从小到大去遍历。01背包中二维dp数组的两个for遍历的先后循序是可以颠倒了,一维dp数组的两个for循环先后循序一定是先遍历物品,再遍历背包容量。
2024-07-12 11:16:45
189
原创 31. 1049. 最后一块石头的重量 II, 494.目标和,474.一和零
【代码】31. 1049. 最后一块石头的重量 II, 494.目标和,474.一和零。
2024-07-11 11:28:08
230
原创 30. 01背包问题 二维,01背包问题 一维,416.分割等和子集
因为对于二维dp,dp[i][j]都是通过上一层即dp[i - 1][j]计算而来,本层的dp[i][j]并不会被覆盖!二维dp遍历的时候,背包容量是从小到大,而一维dp遍历的时候,背包是从大到小。2、确定递推公式,可以有两个方向推出来dp[i][j]但如果一旦正序遍历了,那么物品0就会被重复加入多次!1、确定dp数组以及下标的含义。3、dp数组如何初始化。
2024-07-10 11:55:28
433
原创 29. 62.不同路径,63.不同路径 II,343.整数拆分,96.不同的二叉搜索树
【代码】29. 62.不同路径,63.不同路径 II,343.整数拆分,96.不同的二叉搜索树。
2024-07-09 14:58:28
244
原创 28. 动态规划理论基础, 509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳两个台阶不就是dp[i]了么。所以dp[i] = dp[i - 1] + dp[i - 2]。不考虑dp[0]如何初始化,只初始化dp[1] = 1,dp[2] = 2,然后从i = 3开始递推,这样才符合dp[i]的定义。从递推公式dp[i] = dp[i - 1] + dp[i - 2];
2024-07-08 11:01:30
285
原创 26. 452.用最少数量的箭引爆气球,435.无重叠区间,763.划分字母区间,56.合并区间
那么按照气球起始位置排序,还是按照气球终止位置排序呢?只不过对应的遍历顺序不同。局部最优:当气球出现重叠,一起射,所用弓箭最少。全局最优:把所有气球射爆所用弓箭最少。
2024-07-07 21:00:28
212
原创 25. 134.加油站,135.分发糖果,860.柠檬水找零, 406.根据身高重建队列
i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。局部最优可以推出全局最优。如果ratings[i] > ratings[i - 1] 那么[i]的糖 一定要比[i - 1]的糖多一个,所以贪心:candyVec[i] = candyVec[i - 1] + 1。这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。
2024-07-06 16:04:54
949
原创 24. 122.买卖股票的最佳时机II,55. 跳跃游戏, 45.跳跃游戏II,1005.K次取反后最大化的数组和
第一天没有利润,至少要第二天才会有利润,所以利润的序列比股票序列少一天!从图中可以发现,其实我们需要收集每天的正利润就可以,那么只收集正利润就是贪心所贪的地方!
2024-07-05 12:08:00
282
原创 23. 贪心算法理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和
例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。动态规划的问题在下一个系列会详细讲解。这个四步其实过于理论化了,我们平时在做贪心类的题目 很难去按照这四步去思考,真是有点“鸡肋”。做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。
2024-07-03 16:18:14
379
原创 22. 491.递增子序列 ,46.全排列 ,47.全排列 II ,回溯总结
【代码】22. 491.递增子序列 ,46.全排列 ,47.全排列 II ,回溯总结。
2024-07-02 19:08:07
210
原创 21. 复原IP地址,78.子集,90.子集II
其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,区别就是集合里有重复元素了,而且求取的子集要去重。那么关于回溯算法中的去重问题,
2024-07-01 17:29:13
214
原创 19. 回溯理论基础,77. 组合, 216.组合总和III,17.电话号码的字母组合
所有回溯法的问题都可以抽象为树形结构!因为回溯法解决的都是在集合中递归查找子集,
2024-06-28 12:02:52
261
原创 18. 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,总结
【代码】18. 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,总结。
2024-06-27 11:07:57
174
原创 17. 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点
【代码】17. 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点。
2024-06-26 12:06:44
195
原创 16. 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先
值得注意的是 本题函数有返回值,是因为回溯的过程需要递归函数的返回值做判断,但本题我们依然要。如果递归函数有返回值,如何区分要搜索一条边,还是搜索整个树呢?
2024-06-25 12:01:53
179
原创 15. 654.最大二叉树, 617.合并二叉树, 700.二叉搜索树中的搜索 , 98.验证二叉搜索树
【代码】15. 654.最大二叉树, 617.合并二叉树, 700.二叉搜索树中的搜索 , 98.验证二叉搜索树。
2024-06-22 17:37:47
155
原创 14. 513.找树左下角的值,112.路径总和,106.从中序与后序遍历序列构造二叉树
【代码】14. 513.找树左下角的值,112.路径总和,106.从中序与后序遍历序列构造二叉树。
2024-06-21 15:19:39
204
原创 13. 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和, 222.完全二叉树的节点个数
平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
2024-06-20 14:20:26
165
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人