- 博客(34)
- 收藏
- 关注
原创 LeetCode 518.零钱兑换Ⅱ
如果先遍历背包容量,可以看作是对于每一种背包容量,依次把每个物品放进去试试,而因为当前背包容量与之前背包的状态有关,那么这个步骤我觉得可以看作就是对数的一个排列,顺序不同也会影响到结果。在完全背包问题里面,如果是求最大重量的话,那么这两个遍历顺序是无所谓的。如果先遍历物品,可以理解为把每个物品分别放到不同容量的背包里面试试,看看能不能装下。这题和之前做的不大一样,之前的动态规划转化成背包问题一般都是求能放入的最大重量,这个是求组合数。组合数内部的顺序不影响答案,排序数内部的数字的顺序也可以构成不同答案。
2024-05-28 11:34:12 577
原创 LeetCode 474.一和零
可以发现其实[i][j]就是[j],只是二维表示了,而起初的外层循环为遍历物品,这里省去了,因为每次都是只涉及不变和+1,该题中两层遍历都是对背包容量的遍历。这个题的处理点在于把背包的容量变成二维,初始的dp[i]表示容量为i的背包可放入的最大物品数,现在d[i][j]为最多有i个0和j个1的str最大子集个数。状态转移方程:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);没做出来,最后看了解析,看了半天才懂。
2024-05-27 17:20:12 394
原创 LeetCode 494.目标和
令x为数字前为+的总和,则数字前面为 ‘ - ’ 的数字的和为sum-x,那么 target=x-(sum-x) 即 x=(target+sum)/2 如果把这个题转化为01背包问题,那么 bagsize=x。2.因为(target+sum)/2是向下取整,所以这个时候解是不存在的。1.target>sum,这个时候再怎么也凑不满数字。状态转移方程:dp[j]+=dp[j-nums[i]];即每次可行的解都是前面所有解的和,这是一个组合问题。
2024-05-26 19:07:35 182
原创 LeetCode 1049.最后一块石头的重量
这个过程总体来说可以简化为把石头分为两堆去碰,如果重量一样最后重量就是0,否则就是留下最小的石头。
2024-05-26 14:57:11 214
原创 LeetCode 343.整数拆分
j*(i-j),即把该数分为两个数的乘积,dp[i-j]*j,把数字 i 分成 j 和其他多个数的乘积,转移方程 :dp[i]=max(dp[i],max(j*(i-j),dp[i-j]*j));dp[i]就是每次选出最大值而已。dp[i]:数字 i 拆分产生的最大乘积。
2024-05-26 00:15:59 234
原创 LeetCode 62.不同路径
一:向右走到达dp[i][j]的,即从dp[i][j-1]来的。二:向下走到达dp[i][j]的,即从dp[i-1][j]来的。因为只能向下或者向右走,所以dp[i][j]的来源有两个。dp[i][j]:到达第i行第j列的路径数量。
2024-05-20 17:48:58 114
原创 LeetCode 746.最小花费爬楼梯
因为题目描述可以选择第0或者第1台阶作为开始,那么可以看作0和1台阶都是免费的,所以初始化dp[0]=dp[1]=0。一:从第i-1个台阶走一步上去的,花费 dp[i-1]+cost[i-1]二:从第i-2个台阶走一步上去的,花费 dp[i-2]+cost[i-2]dp[i]:爬到第i个台阶花费的最小值。
2024-05-20 17:34:56 204
原创 (超详细版)山东大学计算机系统原理 实验三 bomb(拆炸弹)
这个实验算是我最喜欢的实验了,感觉跟闯关一样很有意思,第六个炸弹我还是在出去玩的高铁上拆完的,所以想记录一下自己完成这个的思路和过程,也算是给后面的学弟学妹们一个参考,大家还是要自己完成,这个真的很有意思。
2024-05-11 22:33:59 2179
原创 计算机系统原理 实验四 设计MIPS五级流水线模拟器中的Cache
这部分感觉写着很有意思,写之前一脸懵逼,感觉一学期什么都没学懂,写完后对cache方面的知识确实有了飞一般地认知,希望后面的学弟学妹们不要照抄,关键部分注释我都写得比较明白,还是要理解为主,希望大家都能自己写写,这个挺好玩的那么话不多说,代码放这里了。
2024-05-11 21:40:07 233
原创 树的重心(树的dfs)
那么如何得到这三个部分的节点数量,如图在k点进行dfs,通过邻接矩阵在k点的左孩子和右孩子分别进行dfs,然后(n-B-C)就是A的节点数量。整体框架为树的dfs,每次在二叉树中模拟删除一个节点,会把树划分成3部分,如下图。我们的目的是让划分出的最大部分最小。
2024-05-06 16:53:04 181 1
原创 spfa最短路
spfa算法求最短路和dijkstra算法的区别在于D算法在求最短路时,是每次取队列中到源点最小的点 ,visit数组的状态不可以改变,而S算法是每次把被松弛的所有点放进去,visit数组可以改变,visit代表该点是否在队列中,这也Spfa算法可以求负环的原因。
2024-04-22 17:23:23 123
原创 spfa判断负环
每次进行松弛的时候记录下每个点前驱边数,就是起点到该点经历了几条边,如果到达该点的最短路的边数大于等于n,就说明存在负环,因为只有在有负环的情况下dis[i]会不断减小而导致前驱边数大于等于n,用cnt数组记录每个点的前驱边数。代码总体难度还是不大,还是要体会思想。
2024-04-22 16:25:41 175
原创 Leetcode127.单词接龙
因为求的是最短路径,所以理所当然使用bfs,从 beginWord 开始,每次列举这个单词能变换的所有情况,如果在 wordList 中,就放入队列里继续进行 bfs,每次维护一个 path 用来记录变换成这个单词变换的次数。
2024-04-16 11:41:27 180 1
原创 关于二刷Leetcode827.最大的岛屿
心态崩了,整体的代码倒是没出什么问题,思路也很清晰,但是调试了将近一个小时才通过,原因就是在最后遍历0的三重循环中写错了循环的变量,在找到一个0后要把其上下左右的岛屿大小加起来,本来应该是 fx=i+dx[k],fy=y+dy[k],我把k写成i了,调试的时候一直以为是函数体的问题,一直在看函数部分,以为参数没有修改成功。吐了,写代码真的要细心,不要快...
2024-04-15 10:56:13 129 1
原创 Leetcode827.最大人工岛
之后遍历地图,在为0的地方把上下左右的岛的面积加起来就可以了。一开始我的想法是用回溯法,遍历所有岛屿,然后把0改成1后用dfs求出相邻的岛屿的面积,最后取最大,提交的时候不出意外的超时了,很惨。首先,这个题对我来说真的很恶心,因为是刚刚刷图论的题目,一下子感觉上难度了,做了正正一个下午。然后看了题解的思路,是先求出每个岛的面积,组成岛的每个块打上的标记,每个岛标记不一样,并且存在map里面。将一格0变成1,最终连通两个小岛得到面积为 3 的岛屿。由一组上、下、左、右四个方向相连的。中最大的岛屿面积是多少?
2024-04-13 19:58:19 198
原创 Leetcode417.太平洋大西洋水流问题
一开始我从两边遍历的时候,想的是找到一条能直接到另一个海的路,然后两边遍历完找公共部分,这样是不对的,因为我们的目的不是让一条海水流到另一个海,而是在岛上有一个点能流向两个海,所以这个路径是不连通的,从该点开始断开。然后就是在逆流而上处理的时候,应该是判断heights[x][y]>heights[fx][fy]无效,因为此时我们是逆着路走的,并不是海水到岛里,而是岛上的雨水流到大海中,所以这里的判断是反过来的。“太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。
2024-04-13 18:22:26 264
原创 Leetcode130.被围绕的岛屿
首先也是从四个边开始遍历,找到为'O'的点后进行深搜,然后把该点能到达的且也为'O'的点在visit中标记为true,而 其他为'O'但是在visit中为false的点就是需要改为'X'的点,遍历完再对整个图进行遍历修改就行了。被围绕的区间不会存在于边界上,换句话说,任何边界上的'O'都不会被填充为 'X'。任何不在边界上,或不与边界上的 'O'相连的 'O'最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。围绕的区域,并将这些区域里所有的。
2024-04-13 12:44:42 405
原创 魔板(平面魔方)隐式图
这个题是一个隐式图的做法,因为是要找出最少的次数,所以可以联想到使用bfs求最短路。首先我们把二维的数组转化为一维的字符串操作,我是直接写出每个操作的答案,有些大佬可能是算循环和其他方法转化得来的。然后把每次求出三个操作变化下的序列,记录操作顺序即可。
2024-04-13 11:45:51 245
原创 Leetcode 1020.飞地的数量
分别对四个边进行遍历,对边上的'1'进行深搜,同时把搜索过程中找到的1都置0,即把从陆地能到达的岛屿变成海洋。然后对整个矩形进行遍历,对1进行深搜,找到剩余1的数量。
2024-04-09 11:36:29 151 1
原创 leetcode876.链表的中间结点
该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。如果有两个中间结点,则返回第二个中间结点。,请你找出并返回链表的中间结点。链表只有一个中间结点,值为 3。
2023-09-30 10:46:45 32
原创 leetcode 203.移除链表元素
创造一个新的链表,从头遍历原链表,将不等于val的结点接在新链表上,相当于有条件的链表尾插。在做这题的时候遇到不少的坑,因此在此着重提醒一下,以后做相关的题也会遇到很多类似的坑点。的next指针依然是指向原链表的下一个结点,因此最传出。为违法操作,产生了野指针,因此需要特判。产生了野指针,因此出循环后需要对。若原链表本就为空,后续。,这时所有结点都被删除,
2023-09-23 21:41:14 56 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人