03 2023 档案
摘要:题目链接 62. 不同路径 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 表示状态 假如机器人走到了最后一个格子,这时候考虑一下我们需要存储的信息: 最后一个格子的走法数量 机器人的坐标,来判断是否走到 Finish 这时候很容易想到
阅读全文
摘要:题目链接 剑指 Offer 60. n个骰子的点数 思路 引子 根据概率计算公式,点数 k 出现的概率为 我们很容易算出来 n 个骰子投掷的结果总共有 种,所以我们只需要再算出来点数 k 出现的次数就能算出来概率。 在
阅读全文
摘要:题目链接 110. 平衡二叉树 思路 一个空树肯定是平衡二叉树,并且一个平衡二叉树的子树也是平衡二叉树。利用这两条性质我们可以推断出代码中含有 root == null -> return true 和 isBalanced(root.left) && isBalanced(root.right)。
阅读全文
摘要:题目链接 面试题59 - II. 队列的最大值 思路 可以看参考题解:如何解决 O(1) 复杂度的 API 设计题 一开始想到使用单变量 max 来存储最大值,但是会产生两点问题: 当 max 弹出队列之后,下一个最大值是多少没法知道 如果有多个 max,那么当一个最大值弹出队列之后,队列中还有没有
阅读全文
摘要:题目链接 239. 滑动窗口最大值 思路 单调队列的使用方法,可以参考【单调队列】LeetCode 面试题59 - II. 队列的最大值 在本题中将滑动窗口的移动看作往队列中放数和取数的过程,实际上和上面链接中的解法一样。 代码 class Solution { public int[] maxSl
阅读全文
摘要:题目链接 121. 买卖股票的最佳时机 思路 状态转移方程为 ,设置 dp[0] = 0,所以在取最大值的过程中可以省略0,只需要写 dp[i] = Math.max(dp[i - 1], prices[i] -
阅读全文
摘要:原文链接:HashMap和LinkedHashMap遍历机制 对 HashMap 和 LinkedHashMap 遍历的几种方法 以 HashMap 为例,LinkedHashMap 方法一样。 一共有三种遍历方式 Iterator<Map.Entry<String, Integer>> entry
阅读全文
摘要:题目链接 剑指 Offer 46. 把数字翻译成字符串 思路 这个问题与 dp 中的经典问题“跳台阶”问题十分类似,在跳台阶问题中我们是选择跳一个台阶或者两个台阶,而在这个问题中我们是选择再统计一个字符还是再统计两个字符。即我们在遍历到第 个字符的时候,可以把它当做前面 个字符接
阅读全文
摘要:题目链接 剑指 Offer 62. 圆圈中最后剩下的数字 思路 经典约瑟夫环问题,可以使用找规律的方法进行解决。 以 n = 8, m = 3为例,下面这幅图展示了模拟执行的全过程,用 F(n,m) 表示最后存活的人的索引。 从8个人开始,每次杀掉一个人,去掉被杀的人,然后把杀掉那个人之后的第一个人
阅读全文
摘要:链接:https://tensorflow.google.cn/install/source_windows?hl=zh-cn#gpu 推荐使用tensorflow==2.1.0
阅读全文
摘要:报错 Cannot resolve javax.servlet:servlet-api:3.1 原因 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.1</ve
阅读全文
摘要:题目链接 88. 合并两个有序数组 思路 看到题目的第一感觉就是用双指针进行原地合并,但是 nums1 的元素都在数组头部,如果正序合并的话非常容易破坏 nums1 的结构。 nums1 在数组尾部给我们留出了足够的额外空间,这一部分是不怕被破坏的,所以可以从数组尾部开始遍历,逆序合并。 代码 cl
阅读全文
摘要:题目链接 264. 丑数 II 思路 根据题目中的样例,可以进行拆分 观察能发现,这些多项式能分成下面三组: $$ 乘 2: 1×2, 2×2, 3×2, 4×2, 5×2, 6×2, 8×2,
阅读全文
摘要:题目链接 1429. 第一个唯一数字 给定一系列整数,插入一个队列中,找出队列中第一个唯一整数。 实现 FirstUnique 类: FirstUnique(int[] nums) 用数组里的数字初始化队列。 int showFirstUnique() 返回队列中的 第一个唯一 整数的值。如果没有唯
阅读全文
摘要:题目链接 4. 寻找两个正序数组的中位数 思路 分治 代码 class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { if(nums1.length > nums2.length){ int[]
阅读全文
摘要:题目链接 526. 优美的排列 思路 与【DFS】LeetCode 46. 全排列思路类似。 代码 class Solution { private int result = 0; private boolean[] used; public int countArrangement(int n)
阅读全文
摘要:题目链接 698. 划分为k个相等的子集 思路 这道题的核心在于:将数组划分为k个组,数组的每个元素只有可能属于一个组合. 以题目给的nums = [4, 3, 2, 3, 5, 2, 1], k = 4为例,此时target=5. 划分为4个组就相当于四个组合【】,【】,【】,【】.初始状态下均是
阅读全文
摘要:题目链接 77. 组合 思路 DFS 模板题 代码 class Solution { private List<List<Integer>> result = new ArrayList<>(); private Deque<Integer> path = new ArrayDeque<>(); p
阅读全文
摘要:题目链接 47. 全排列 II 思路 借用代码随想录的图。 以最右侧的分支为例,首先将 2 摆在第一位,剩下两个 1,在走完左边的 1 分支之后,对右边的 1 进行判断,发现右边的 1 还是和左边的一样,摆在第二个位置上(因为 used[i - 1] == false,说明左边的 1 没有使用)。因
阅读全文
摘要:题目链接 46. 全排列 思路 本题是求排列问题.与组合问题不同的是,在排列问题中,不同的数字顺序被视为不同的排列,比如 [1,2] 与 [2,1] 是两种不同的排列。 搜索树如下图所示,引用自代码随想录 在组合问题的 dfs 算法上进行一点小修改即可,参考【DFS】LeetCode 78. 子集的
阅读全文
摘要:题目链接 90. 子集 II 思路 去重方法与【DFS】LeetCode 40. 组合总和 II思路相似 代码 class Solution { private List<List<Integer>> result = new ArrayList<>(); private Deque<Integer
阅读全文
摘要:题目链接 78. 子集 思路 求子集问题和 77.组合 (opens new window) 和 131.分割回文串 (opens new window) 又不一样了。 如果把子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点! 其
阅读全文
摘要:题目链接 216. 组合总和 III 思路 与 【DFS】LeetCode 40. 组合总和 II 思路一致,只不过 candidates 数组在题目中明确说明了只有1到9。 代码 class Solution { private List<List<Integer>> result = new A
阅读全文
摘要:题目 40. 组合总和 II 思路 一道经典的排列组合去重问题,搜索的思路很简单,关键在于如何去重。 借用一下代码随想录的图 去重的工作实际上就是判断同一层上的相同元素是否已经被用过。即如果 candidates[i] == candidates[i - 1] 并且 used[i - 1] == f
阅读全文
摘要:题目链接 40. 组合总和 II 思路 一道经典的排列组合去重问题,搜索的思路很简单,关键在于如何去重。 借用一下代码随想录的图 去重的工作实际上就是判断同一层上的相同元素是否已经被用过。即如果 candidates[i] == candidates[i - 1] 并且 used[i - 1] ==
阅读全文
摘要:题目链接 39. 组合总和 思路 使用 DFS 进行排列组合,首先判断结束递归条件: sum > target sum == target index == len 因为每个数能取无限次,所以从 0 开始慢慢将 candidates[index] 加入到 sum 中,直到 sum > target,
阅读全文
摘要:题目链接 17. 电话号码的字母组合 思路 使用 DFS 进行枚举。 代码 class Solution { private HashMap<Character, char[]> map = new HashMap<>(); private List<String> result = new Arr
阅读全文
摘要:题目链接 131. 分割回文串 思路 使用 DFS,同时依次检查分割的字符串是否是回文串。 注意:需要频繁添加删除末尾元素时,可以使用 Deque 代码 class Solution { private List<List<String>> result = new ArrayList<>(); p
阅读全文
摘要:题目链接 1376. 通知所有员工所需的时间 思路 根据题目的条件,很容易知道 informTime == 0 的点是叶子结点,所以可以自底向上遍历,取最大值。 代码 class Solution { public int numOfMinutes(int n, int headID, int[]
阅读全文
摘要:题目链接 208. 实现 Trie (前缀树) 思路 字典树与多叉树非常类似,但是它本身结点不存储值。 什么意思呢? 多叉树结点一般是这样的: class Tree{ int value; Tree[] next; } 而字典树的结点一般是这样的: class Trie{ boolean isEnd
阅读全文
摘要:题目链接 79. 单词搜索 思路 DFS 模板题 代码 class Solution { public boolean exist(char[][] board, String word) { int m = board.length; int n = board[0].length; boolea
阅读全文