- 博客(63)
- 问答 (1)
- 收藏
- 关注
原创 牛客每日一题 | 最大子矩阵
题目说明了列数最大为2,首先考虑只有1列的情况dp[n][k]表示前n个数的最大k个子数组和,那么使用sum表示前缀和就有dp[i][k] = dp[j][k-1]+sum[i]-sum[j];那么考虑这道题,可以理解为从第一列选择i行,从第二列选择j行,使得子数组个数和为k,且和最大,对于每一列都可以使用1列的dp来求解,sum此时就是一个二维数组,第二个元素表示哪一列。特别的,当i=j时那么需要考虑两列合并的和比单独一列大的情况。
2024-03-12 19:50:10 427
原创 力扣每日一题:Dijkstra1976.到达目的地的方案数
考虑一个点u,原点到u的最短路径为dis[u],最短路径数目为ways[u],那么对于u的连通点v,又u到v的权值k,然后原点到v的最短路径是dis[v],最短路径数目为ways[v]。本题是在非负权值图中求解最短路径,典型的Dijkstra算法的应用,只不过在求解最短路径时,还需要记录最短路径数目。这个又涉及到一点动态规划的思想。那么从u到v,有如下递推公式。
2024-03-05 12:31:50 537
原创 代码随想录Day67 | 695.岛屿的最大面积 1020.飞地的数量
采用bfs,这道题相较于之前的题变为了求岛屿的最大面积。那就说明我们每遇到一个新的岛屿就要重新计算一个面积,然后和之前的最大面积比较。将边缘陆地形成的岛屿全部变为海洋后,再重新遍历整个图,得到的就是飞地。
2024-03-03 11:34:30 458
原创 代码随想录Day66 | 图的DFS与BFS
无向图在dfs的时候需要考虑后续节点的连通会与父节点连接,所以,dfs参数中需要加上一个父节点。从出发点一圈一圈的搜索,需要使用数据结构来存储遍历的数据,可以是有队列或者栈。终止条件为当当前搜索点的下标为n-1时。本题可以很好的练习了解BFS。本质上就是回溯算法。dfs搜索路径即可。
2024-03-02 10:18:06 583
原创 代码随想录Day63 |503.下一个更大元素II 42. 接雨水
对于栈内一个可以积水的情况,栈头元素表示当前木板,栈头第二个元素应当表示当前木板的左边最大值,待入栈元素表示当前木板的右边木板。当右端木板最大值比左端木板最大值大时,我们考虑左指针指向的当前木板。那么其一定是可以存水的,因为其右边有比他高的木板。对于一个下标i寻找其左边的第一个大值和右边第一个大值,这个位置的积水量就可以求得。两个指针分别从头和尾向中间移动,并记录扫描过的左端和右端木板最大值。当遇到与栈头相同的元素要入栈时,应当弹出栈头,压入最新的下标。栈中存放的元素:当前木板的下标。
2024-02-27 11:56:33 400
原创 代码随想录Day53 | 股票买卖
首先对于dp[j][0],由于只会购买一次,所以如果前一天持有股票那么dp[j][0] = dp[j-1][0]。其次对于dp[j][1],如果第j-1天不持有股票那么dp[j][1] = dp[j-1][1]。如果第j天卖出股票那么dp[j][1] = dp[j-1][0]+prices[j]其次对于dp[j][1],如果第j-1天不持有股票那么dp[j][1] = dp[j-1][1]。首先对于dp[j][0],由于只会购买一次,所以如果前一天持有股票那么dp[j][0] = dp[j-1][0]。
2024-02-17 14:47:49 890
原创 代码随想录Day51 | 139.单词拆分 多重背包
具体解决方法就是利用01背包,然后对每个物品在判断是否选择的时候,改为选取多少个。本质上就是01背包,只不过对于每种物品的个数大于等于1,但不是无限的。
2024-02-16 09:34:36 408
空空如也
webots controller对应的exe运行不到一秒 就会崩溃
2021-08-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人