摘要:地址 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://www.papamelon.com/problem/194 解答 书本的第一个例题 直接暴力吧 由于抽签是拿出来再放进去袋子 重新抽,也就是选择数字可以重复 那么每次选择数字的范围都是0~~n 四重循环 时间复杂度就是O(n^4) #include <iostream> usi
阅读全文
摘要:地址 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: 输
阅读全文
摘要:地址 https://leetcode-cn.com/problems/majority-element/ 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:[3,
阅读全文
摘要:地址 https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/ 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例: 输入:"Let's take LeetCode contest" 输出
阅读全文
摘要:地址 https://leetcode-cn.com/problems/reverse-string/ 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1:
阅读全文
摘要:地址 https://leetcode-cn.com/problems/nim-game/ 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合,你作为先手。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。
阅读全文
摘要:地址 https://leetcode-cn.com/problems/linked-list-cycle-ii/ 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果
阅读全文
摘要:地址 https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/ 给定一个二叉搜索树的根节点 root ,和一个整数 k , 请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例 1: 输入:root = [3,1
阅读全文
摘要:地址 https://leetcode-cn.com/problems/contains-duplicate/ 给定一个整数数组,判断是否存在重复元素。 如果存在一值在数组中出现至少两次,函数返回 true 。 如果数组中每个元素都不相同,则返回 false 。 示例 1: 输入: [1,2,3,1
阅读全文
摘要:地址 https://leetcode-cn.com/problems/intersection-of-two-linked-lists/ 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。 如果两个链表没有交点,返回 null 。 图示两个链表在节点 c
阅读全文
摘要:地址 https://leetcode-cn.com/problems/out-of-boundary-paths/ 给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。 你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外
阅读全文
摘要:地址 https://leetcode-cn.com/problems/product-of-array-except-self/ 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output , 其中 output[i] 等于 nums 中除 nums[i] 之外其余各元
阅读全文