摘要:地址 https://www.papamelon.com/problem/352 解答 由于已经确定是2排待填充的地板,那么填充方法就是两种 如图 又已知待填充的地板长度为n,题意可以转换为 要么选择1个竖方案填充要么选择2个横方案 ,问有达到长度n有多少种选择。 再推断一步 使用1代替1个竖砖块方
阅读全文
摘要:地址 https://www.papamelon.com/problem/321 解答 首先是尝试把该问题转化成蒙德里安的梦想那道题,但是由于复杂度是2n*2n,当n为15的时候就超时了。 后面改成了记忆化搜索.可以去掉一些不可能达到的状态搜索,OK了。 大概这就是记忆化搜索相对直接递推DP公式的优
阅读全文
摘要:地址 https://leetcode-cn.com/problems/longest-valid-parentheses/ 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s = "(()" 输出:2 解释:最长有效括号子串是 "()
阅读全文
摘要:地址 https://www.papamelon.com/problem/318 按照题意的 dp[n]=dp[n-1]+dp[n-2] 可以得到正确答案,但是n为10^16 该算法复杂度为 O(n) 会TLE 根据矩阵相乘的知识可以得到 |Fn+2| = |1 1||Fn+1| |Fn+1| =
阅读全文
摘要:地址 https://www.papamelon.com/problem/260 贪心方法不对。 本体属于二分章节 尝试下将选择K个物品的重量价值比控制在X内 (V1+V2+V3+......+Vi) / (W1+W2+W3+......+Wi) = x 也就是 ∑Vi/ ∑Wi = x 该不等式转
阅读全文
摘要:地址 https://www.papamelon.com/problem/257 二分查找模板题 二分有两个模板 一个是找到符合查询数字的下边界<= 一个是找到符合查询数字的上边界>= 记熟会方便很多. 本题是查找第一个大于等于k的数字 是下边界 #include <iostream> using
阅读全文
摘要:地址 https://www.papamelon.com/problem/327 由于题目有两个排序关键字长度和重量,只有两个均大于等于前一个才能达到最小费用 先尝试按照某一个关键字排序 例子中的 4 5 2 3 1 9 2 1 5 4 排序后就变成 1 2 3 4 5 4 1 5 9 2 这时候我
阅读全文
摘要:地址 https://www.papamelon.com/problem/328 解答 以6个接口为例 左端 1 2 3 4 5 6端口对应 右端 4 2 6 3 1 5 端口 如图 左1连接的是右5 如果选择这条接线 那么左端其他接口就不能连接右端5以前的接口了,否则就会接线交叉。 按照这个规则,
阅读全文
摘要:地址 https://www.papamelon.com/problem/217 解答 将切割逆向看,可以看做是将多段木棒粘合起来。粘合的成本是两个木棒的长度 可以看到处于树最底层的木棒长度在每次粘合中都加入了进去。 所以底层的节点应该越短越好,比如5. 这就是一种贪心思想。具体原理可以参考哈夫曼树
阅读全文
摘要:地址 https://www.papamelon.com/problem/212 解答 贪心算法 选择符合条件中区间结束比较早的那个区间。 可以证明,同样的选择区间中,选择较早结束的区间至少不会得到比选择较晚结束的区间更差的结果。 基于以上规则,我们将区间按照结束时间排序。 每次选择起始时间比当前结
阅读全文
摘要:地址 https://www.papamelon.com/problem/203 解答 BFS的搜索方案是一步步扩展,天生具有搜索最短路径性质。 我们可以使用宽度优先搜索 BFS进行搜索 #include <iostream> #include <vector> #include <queue> u
阅读全文
摘要:地址 https://www.papamelon.com/problem/202 解答 很好的BFS模板题, 也可以尝试DFS。 遍历 每个点 如果是水坑就将其作为起点开始BFS或者DFS搜索,同一批次搜索的点就是同一个坑。 搜索过的点做上标记,避免重复搜索。 #define _CRT_SECURE
阅读全文
摘要:地址 https://www.papamelon.com/problem/206 解法 硬币选择贪心方案,假设有两种解答方案 贪心解和非贪心解 1 非贪心和贪心解 都有解法的情况 由于 贪心是优先选择小于等于总需求面值的最大面值硬币, 它是用的硬币数量是G枚硬币 非贪心有解 但是他选择小于等于总需求
阅读全文
摘要:地址 https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答
阅读全文
摘要:地址 https://www.papamelon.com/problem/201 解答 使用dfs遍历各个数字选择或者不选择的情况,判断是否能够得到指定的和 时间复杂度 O(2^n) #define _CRT_SECURE_NO_WARNINGS #include <iostream> using
阅读全文
摘要:地址 https://www.papamelon.com/problem/200 解答 比起抽签I 范围扩大了,那么O(n3)的复杂度的算法已经不适合了。 我们记录任意两个签上的数字的和并记录下来,时间复杂度是O(n2)。 然后遍历任意两个签的数字相加后还需要加多少数字才能得到指定的和。然后在记录中
阅读全文
摘要:地址 https://www.papamelon.com/problem/193 解答 根据题意,蚂蚁a和b相遇后各自反向,起始就等于a和b穿过对方继续行走。所以没有任何干扰,就是求每个蚂蚁向左或者向右的最大最小时间 #include <iostream> #include <algorithm>
阅读全文
摘要:地址 https://www.papamelon.com/problem/192 解答 三角形的三条边需要满足 任意两条边的和大于第三边,也就是最长的棍子的长度小于其他两根根子的和 我们使用dfs遍历三根棍子的组合 选出最大周长。 也可以直接三次循环 遍历三根棍子的组合,选出最大周长。 复杂度都是O
阅读全文
摘要:地址 https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 请编写一个函数,用于 删除单链表中某个特定节点 。 在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。 题目数据保证需要删除的节
阅读全文
摘要:地址 https://leetcode-cn.com/problems/power-of-two/ 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。 示例 1: 输
阅读全文