- 博客(30)
- 收藏
- 关注
原创 代码随想录Day17 图论-3
学习并查集 我们就要知道并查集可以解决什么问题以下是代码模板在并查集中find是寻找根的操作如下图第二步 8的根是1 3的根就是3 所以加入之后由1指向3。
2024-09-28 21:07:54
2343
原创 代码随想录Day17 图论-2
本题思路很简单 要求我们找到可以满足到达两个边界的单元格的坐标有一个优化的思路就是 我们从边界的节点向中间遍历 然后用两个数组表示 一个是第一组边界的数组 一个是第二边界的数组 如果两个数组都遍历到了某一个单元格 就说明该单元格时满足题目要求的。
2024-09-24 20:26:51
634
1
原创 每日1题-2
我们可以用遍历的方式 让pattern[0]为x pattern[1]为y 遍历text遇到x让x数目加1 遇到y让y数目加1 总数ans+=x的数目(如果pattern中为两个相同的字符怎么办?我们肯定不能先执行x那段逻辑 要先执行y这段逻辑)本题要找pattern在text出现的次数 然后在插入pattern中的一个字符 得到更多的出现次数 很容易想到先求出不插入字符前 子序列出现的次数。最后text在开头或者结尾插入字符 根据x,y的数目插入。
2024-09-24 10:12:53
166
原创 代码随想录Day17 图论-1
做图论这部分的题目DFS和BFS少不了DFS是深搜 沿着一条路一直搜索下去直到无法继续向下 再通过回溯 换一条路进行搜索BFS是广搜 就是从当前节点出发 一直把当前节点所连接的所有节点都搜索过之后 进入下一节点在开始相同的搜索过程。
2024-09-23 21:40:25
677
原创 每日1题-1
该题题意清晰 给出了得分的公式 我们可以拆分成values[i]+i和values[j]-j两个部分 要求表达式的最大值 我们可以维护一部分变量最大 再通过遍历确定另一个变量的最大值 因为i是一定小于j的 我们可以在遍历j的同时 确定在j之前values[i]+i该表达式的最大值用mx来表示 最开始肯定初始化成数组第一个数 然后每一次遍历不断更新最大值。
2024-09-23 20:41:22
165
原创 代码随想录Day16 单调栈
该题的题意很简单 要求遍历温度数组 找出几天后会出现下一次更高的温度 这就可以用到单调栈的知识那么我们该如何实现单调栈呢 该题目栈内保存的肯定是元素的下标 因为这样相减就可以得到几天后会出现更高的温度 0先放入栈底 然后遍历到74 通过栈顶的下标找到栈顶元素是73 因为74大于73所以ans数组下标为栈顶的下标放入1-0=1 一次类推 如果遍历的元素小于等于栈顶的元素 就要一次入栈 满足单调栈为单调递增的时候 可以求出数组右边第一个大于自己元素的位置。
2024-09-22 11:49:51
704
原创 代码随想录Day15 动态规划--4
通用的解法都是动态规划 暴力或者贪心都只适用于个别的场景对于股票问题最重要的是要确定每一天有多少个状态分清状态代码就很清晰。
2024-09-17 21:16:08
438
1
原创 代码随想录Day15 动态规划--3
我们以198这道题来分析动态规划在打家劫舍里面的应用 题意很简单 我们不能偷相邻的房间 只能隔着一个房间偷 然后要求我们偷的价值最大 根据做题的步骤 我们可以清晰的确定dp数组的含义是 在当前房间所可以偷到的最大价值 并且当前房间可以偷盗的价值与前两个房间是有关的 是前一个房间所偷盗的价值和前前一个房间加上该房间价值的最大值 所以我们初始化的时候 要把最开始0和1的房间初始化。打家劫舍2 是一个成环的数组 这就涉及到了两种情况 取首不取尾和取尾不取首这两种情况 然后我们最后只需要返回这两个情况的最大值。
2024-09-16 15:14:27
257
原创 代码随想录Day15 动态规划--2
两块石头相撞等价于两组石头相撞 所以我们只要求出来两组石头相撞最小重量 就代表两组重量相近就是最小的即我们要越接近总重量的一半 这样就可以抽象成一个背包问题public:i++) {j--) {
2024-09-15 18:18:09
1028
原创 代码随想录Day14 动态规划--1
动态规划实质就是动态数组里面的每一个状态都是根据前一个状态来推导出来的对于动态规划的问题 有以下5个解题步骤1.明确dp数组的含义以及其下标的含义2.确定递推公式3.dp数组应该如何初始化4.确定遍历顺序5.举例推导dp数组。
2024-08-28 10:51:02
494
原创 代码随想录Day13 贪心算法--3
如上图所示 我们可以先用每一个气球的左边界来对气球进行一个排序 然后我们就可以开始遍历整个序列 我们看当前气球的左边界是否大于前一个气球的右边界 如果大于 就说明两者不重叠 那么弓箭数就要加1 如果不大于 就说明两者重叠 此时我们应该更新一下重叠气球的最小右边界 也就是取两个气球右边界的最小值(因为可以存在【1,4】 【2,3】这样的情况)
2024-08-27 17:32:26
614
原创 代码随想录Day12 贪心算法--2
本题要通过K次取反返回最大的数组和 我们可以想到 要让负数变成正数(并且是绝对值越大的负数先变成正数) 如果还有取反次数 再去对绝对值最小的正数取反(细节就是奇数只要取一次反就可以了)
2024-08-19 22:50:46
410
原创 代码随想录Day11 贪心算法--1
该题目的目标是尽可能的满足越多数量的孩子 所以我们可以先给孩子和饼干排序 然后从后遍历孩子数组 从最大的饼干开始判断 如果可以满足就往前 如果不能满足 饼干数组就不动 孩子数组往前遍历(代码很简单)
2024-08-19 10:24:37
522
原创 代码随想录Day7 二叉树--2
我比较喜欢用迭代的方法来做题目 因为有的用递归法真的理解不了 这道题用迭代的方法思路很清晰 首先就是判断根节点 判断结束后 用层序遍历的方式 用一个队列que 放入根节点的左右孩子 然后开始进入while当队列里面不为空的时候 用两个临时的节点 接受队列出口的两个节点(即左孩子和右孩子)if判断 当左右孩子都为空 则continue 若左右孩子有一个为空 或者都不为空但是左右孩子的值不相等 返回false 最后按顺序加入左节点的左孩子 右节点的右孩子 左节点的右孩子 右节点的左孩子。
2024-07-29 00:55:02
961
原创 代码随想录Day5 栈和队列
对于栈的经典题目 差不多就是括号匹配 或者什么算后缀表达式 总之就是如果相匹配就弹出栈 如果匹配失败 就压入栈对于队列来说单调队列 优先队列是要掌握的t=N7T8优先队列详解https://blog.csdn.net/weixin_52115456/article/details/127606811?
2024-07-25 22:47:46
2017
1
原创 KMP算法--力扣28来理解KMP算法
getnext函数求next数组 然后两个指针i j分别遍历文本串和模式串 如遇到不匹配的情况 j根据所求的next数组回退到j所在下标的值(因为我前缀表统一减一 相当于回退到下标所在的值 后面匹配的时候是匹配s[j+1]) 如果字符相匹配 则j++继续向后匹配 如果满足条件则输出。先求next数组(前缀表统一减一)初始化next数组 i从下标1的地方开始向后遍历 判断是否需要回退 如果不匹配 j需要回退 由于我们前缀表统一减一 所以直接回退到j下标的值(匹配的是s[j+1]) 如果匹配 j++;
2024-07-24 13:27:44
682
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人