代码随想录
王禄DUT
这个作者很懒,什么都没留下…
展开
-
代码随想录第32天|
树状数组:重点在于定义 当前节点的含义:下标为0记录不偷该节点所得到的的最大金钱,下标为1记录偷该节点所得到的的最大金钱。原理就是:假如你考虑第一个元素就不能选最后一个 你考虑最后一个元素就不能选第一个两种情况动态规划求最大值。原创 2024-10-09 14:25:30 · 135 阅读 · 0 评论 -
代码随想录第32天|
总结:完全背包 观察情况如果是 排列问题先遍历背包再遍历物品 使得每一种情况都有 组合问题像便利物品 再遍历背包 否则会多计数 本体必须是排列问题 因为根据dp的结果 每个单词都必须遍历一遍 要不然有的dp为false。原创 2024-10-08 22:40:25 · 64 阅读 · 0 评论 -
代码随想录第31天|
注意:没有要求或者组合数必须先遍历物品 排列数必须先遍历背包容量。原创 2024-10-07 21:34:27 · 119 阅读 · 0 评论 -
代码随想录第30天|
【代码】代码随想录第30天|原创 2024-10-07 13:35:04 · 81 阅读 · 0 评论 -
代码随想录第29天|
【代码】代码随想录第29天|原创 2024-10-02 16:04:21 · 85 阅读 · 0 评论 -
代码随想录第28天|
【代码】代码随想录第28天|原创 2024-10-02 12:54:09 · 95 阅读 · 0 评论 -
代码随想录第27天|
【代码】代码随想录第27天|原创 2024-09-28 10:23:48 · 114 阅读 · 0 评论 -
代码随想录第26天|
思路:设置一个标志位 代表从哪里开始后面都是9 遍历数组 前面大于后面就更新mark 同时 把当前位置--原创 2024-09-27 19:12:36 · 85 阅读 · 0 评论 -
代码随想录第25天|
思路:贪心思想优先比较 身高 然后按照队列要求插入 这是利用了 二个维度优先比较其中一个维度的原理 ,然后按照顺序插入由于之前插入的都比大于等于 所以只要插入到相应位置一定是对的。思路:从0开始找到最右边界 如果当前最右边界==i 然后找下一个边界。原创 2024-09-26 14:17:20 · 167 阅读 · 0 评论 -
代码随想录第24天|
思路:没用贪心使用暴力解法得到答案。思路:逻辑问题要捋清楚。原创 2024-09-25 14:54:17 · 130 阅读 · 0 评论 -
代码随想录第23天|
思路:贪心 分割每天的利润形成size-1的数组选取正利润进行拼接。max代表当前坐标下的最大移动距离。原创 2024-09-25 13:28:55 · 122 阅读 · 0 评论 -
代码随想录第22天|
思路:used数组是全排列的关键 他代表当前元素在递归中有没有被使用 同时也有第二个作用在本层循环的时候如果当前元素和前一个元素相同说明之前递归返回了 不应该选择重复元素。思路:利用unorder_SET对本层元素进行哈希储存。原创 2024-09-21 10:52:41 · 215 阅读 · 0 评论 -
代码随想录第21天|
递归遍历 pointNum=3为终止条件 isValue判断是不是符合要求闭区间得证。原创 2024-09-20 18:03:23 · 106 阅读 · 0 评论 -
代码随想录第20天|
如果没有重复元素 只要startIndex(i)+1就可以, 但如果有重复元素就说明即使每次startIndex(i)+1 后面的重复元素 比如两个 1 1 2 3 要生成 6 可能会生成两个 123 123 如何避免这种情况就是要在重复元素出现的时候避免重复遍历 后面的1可以看作前面的1的真子集 所有情况都是包含的。给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。中的每个数字在每个组合中只能使用。原创 2024-09-19 19:40:56 · 533 阅读 · 0 评论 -
代码随想录第十八天|669. 修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树
对于符合的 修剪左右子树 最后返回修剪完的子树。对于 不符合的 返回右子树和左子树的修剪结果。所以对于NULLreturn NULL。返回值代表修剪之后的二叉树的根节点。通过接住返回值来达到删除结点的目的。原创 2024-09-17 17:43:02 · 130 阅读 · 0 评论 -
代码随想录第十七天|701.二叉搜索树中的插入操作 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
这个时候如果右子树直接返回 别问我为什么左子树不行 因为这样写代码有一个通用的逻辑 否则在右子树最左边 这个时候交换val 这个时候目标节点一定没有。思路:我们需要仔细观察二叉搜索树的性质 当找到一个val在p q之间的结点就说明已经找到最近公共祖先。首先 第一次我们会遍历到我们需要删除的结点 但此时如果我们想要删除结点很麻烦。当要删除的是根节点的时候就直接返回 不需要递归 很难的题需要二刷。然后返回root 最后一直返回到主函数 返回root。delete函数返回的是被删除完的子树的根节点。原创 2024-09-16 13:10:58 · 201 阅读 · 0 评论 -
代码随想录第十六天|530.二叉搜索树的最小绝对差
NULL肯定返回 left或者right也返回说明这个时候已经找到目标结点了 然后我们设置两个TreeNode来承载 返回值 这时候 如果 左右都不为空 就说明当前结点是目标结点返回 如果一个为空 一个不为空 说明已经找到了目标节点直接返回上一层 都为空说明没找到返回NULL 这个时候可能有第二种情况 q或者p是祖先 逻辑一样 q直接返回 因为永远是一个节点为q一个结点为空的情况 一直返回q 题目得解。思路:需要二刷 掌握思想 记录pre结点 进行中序遍历 寻找前后关系。原创 2024-09-13 10:47:46 · 157 阅读 · 0 评论 -
代码随想录第十五天|617.合并二叉树 700.二叉搜索树的搜索
【代码】代码随想录第十五天|617.合并二叉树 700.二叉搜索树的搜索。原创 2024-09-13 00:06:35 · 140 阅读 · 0 评论 -
代码随想录第十四天|513.找树左下角的值112. 路径总和106.从中序与后序遍历序列构造二叉树654.最大二叉树
思路:注意指针一定要加上& 否则 new只会改变局部变量的指针 原来的指针地址不变。路径之和需要二刷 有返回值的递归 都需要return 找好逻辑。原创 2024-09-11 17:41:08 · 161 阅读 · 0 评论 -
代码随想录第十三天|222.完全二叉树的节点个数110.平衡二叉树257. 二叉树的所有路径 404.左叶子之和
思路:完全二叉树性质向左遍历 向右遍历高度一样 是完全二叉树可以直接计算。logn logn 时间复杂度。原创 2024-09-10 20:47:49 · 149 阅读 · 0 评论 -
代码随想录第十二天|226.翻转二叉树...
单层递归逻辑 如果left等于right了 比较外层结点和内层节点 返回与操作。思路:看了题解明白的 递归三部曲 对称比较 left right变量。原创 2024-09-09 19:31:14 · 230 阅读 · 0 评论 -
代码随想录第十一天|二叉树的遍历方式
统一风格迭代法不好理解。原创 2024-09-08 22:57:23 · 365 阅读 · 0 评论 -
代码随想录第十天|150.逆波兰表达式求值 239.滑动窗口的最大值 347.前K个高频元素
思路:使用了单调队列 没太理解 看完视频 差不多明白了 文字版写的不太全 就是自己利用底层容器deque构建一个单调队列 pop代表最左边元素 push代表最右边元素 pop元素如果不是当前队头元素 说明已经被pop掉 因为要维护单调队列 push 的时候前面比当前元素小的都要pop O(n)时间复杂度遍历实现。巧妙思路 排序小顶堆 好题 还联系容器的使用和优先队列。思路:做过 使用stoi :字符串转数字。priority_queue 排序。原创 2024-09-06 19:40:38 · 267 阅读 · 0 评论 -
代码随想录第九天| 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
思路:很不错的题 利用输入输出流的原理 使得输入缓冲 到输出的时候 进入输出栈 实现队列。用一个队列就可以实现很厉害的思路。原创 2024-09-06 11:05:19 · 200 阅读 · 0 评论 -
代码随想录第八天|151.翻转字符串里的单词 卡码网:55.右旋转字符串 28. 实现 strStr() 459.重复的子字符串
数组长度-最大前缀和长度为一个周期 如果数组能整除这个周期说明是重复子串。思路:暴力 遍历结尾作为字串 然后在主串检查。思路:经典KMP 需要二刷 比之前熟练一点。KMP 和移动搜索需要二刷。原创 2024-09-05 19:23:15 · 258 阅读 · 0 评论 -
代码随想录第七天|344.反转字符串 541. 反转字符串II 卡码网:54.替换数字
思路:库函数或者自己写。原创 2024-09-04 15:10:30 · 260 阅读 · 0 评论 -
代码随想录第六天|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
遍历random每一个字符 在magazine寻找 若是找到break 直到结束 同时记录flag。思路:暴力解法O(n^4)如何降低时间复杂度呢 可以利用哈希表 储存ab数组之和的出现次数。然后再遍历cd数组 寻找-c+d find时间复杂度为1 所以时间复杂度为O(n^2)思路:本题就是在magazine能否找到random所有的字符 暴力解法。若是本次循环没找到直接return false 时间复杂度为O(n*m)思路:和三数之和相同原理需要多练多理解。思路:没有什么思路 直接看代码随想录。原创 2024-09-03 20:16:31 · 200 阅读 · 0 评论 -
代码随想录第五天| 哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
思路:使用集合去重 find函数寻找交集 考察容器unorde_set的使用。思路:用空间换时间 定义足够大小数组记录字母出现的次数。原创 2024-09-02 19:35:08 · 323 阅读 · 0 评论 -
代码随想录第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
第二点如何找到起始点,现在我们已有的条件是相遇点,根据数学公式我们可以知道head和相遇点到起始点的距离分别是 x =(n-1)*圈数+z 也就是说当head到达起始点的时候 相遇点跑了n圈加上z也就是起始点的位置正好相遇 只要不断遍历就可以。我也思考了为什么相遇slow走不到一圈 因为fast相对于slow每次走前进一步 slow 和fast在圈中的距离一定小于圈长 所以slow走不到一圈就会被fast追上。思路:设两个指针让它处于相同相对的位置 关键在于找到相同的相对位置。原创 2024-08-31 00:45:20 · 198 阅读 · 0 评论 -
代码随想录第三天| 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表
debug好久好久 习惯acm模式 开始转变leetcode模式有点不习惯 可以插在不存在元素的前面这个bug卡了我好久 一点一点对照代码才发现 还是要细心读懂题意。本以为这道题很简单但还是看了答案 对于头节点和非头节点的处理不是很好 需要注意边界值的处理 设置虚拟头节点是一个很好的想法。思路:双指针法 两种实现方式。思路:就是正常移除操作。原创 2024-08-30 00:56:59 · 232 阅读 · 0 评论 -
代码随想录算法训练营第二天| 209、长度最小的子数组 59.螺旋矩阵
思路:模拟 慢慢debug就可以 写了半个点 注意不变量左闭右开 四个方向。最开始使用if发现逻辑错误 因为滑动窗口寻找最小子序列但if不是最小的。滑动窗口思想:看了一下代码随想录 看来还是双指针的思想。EOF的值是-1 ~表示按位取反。思路:暴力o(n^2) 超时了。思路:二维前缀和 O(1)O(1) 时间复杂度。原创 2024-08-29 18:31:05 · 252 阅读 · 0 评论 -
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素 977.有序数组的平方
刚接触快慢指针的思想 :大概就是慢指针一定不会覆盖快指针 所以让快指针寻找元素 慢指针更新新数组元素。思路:大概就是遍历一个周期找到顺序 关键在于发现递增数组的规律 很简单的双指针题目。很简单的二分查找 关键在于边界值的处理和熟悉程度。以为计数相同的 结果是不同的 需要认真审题。思路:暴力从头到尾遍历 计数挪移。时间复杂度:O(n^2)原创 2024-08-28 18:17:45 · 286 阅读 · 0 评论