菜鸟什么时候才能变成老鸟,欢迎留言纠错~|

Shie1d

园龄:5年9个月粉丝:6关注:0

随笔分类 -  LeeCode

437. 路径总和 III
摘要:题面 核心思想 树上的前缀和o(n) 当前的前缀和:curSum 用 Map 存储出现过的前缀和:preSum 如果 curSum - preSum == target 就说明有一段区间和为target,preSum出现了几次就有几段区间,所以用map存储前缀和出现的次数 代码 class Solu
16
0
0
1600. 王位继承顺序
摘要:题面 核心思想 纯模拟!没反应过来是前序遍历~ private Map<String,List<String>> children; 表示一个人的孩子 当调用getInheritanceOrder 时 通过map 搜索答案,由于孩子也有可能有孩子,无限套娃,所以通过递归搜索建立答案。 建立答案的时候
16
0
0
894. 所有可能的真二叉树(中等)
摘要:没做出来,难受 😫 核心思想 记忆化搜索 记录n个节点时,能够形成的真二叉树。 看注释吧~ ps: 节点是复用的,也就是会有不同节点指向同一个节点。 代码 class Solution { // map存储 剩余n个节点时 能够形成的真二叉树 防止重复计算 HashMap<Integer, Lis
17
0
0
1997. 访问完所有房间的第一天(中等)
摘要:核心思想 注意数据范围 0 <= nextVisit[i] <= i 也就是说 当前下标i只能去之前的地方 也就是说i+1 只能 通过 i 访问次数为偶数才能达到 定义 dp[i] 到达第i个房间的天数 那么要到达第i个房间的路径为 0 -> i-1 -> nextVisit[i-1] -> i-1
5
0
0
2580. 统计将重叠区间合并成组的方案数(中等)
摘要:核心思想 先按第一个元素排序,原区间重合的合并为一个,计算合并完后的区间个数。 每个区间都有2个选择,res不断乘2。 class Solution { public int countWays(int[][] ranges) { long res = 1; final int MOD = (int
8
0
0
(手写堆)215. 数组中的第K个最大元素(中等)
摘要:题面 核心思想 手写堆 构建一个大顶堆,删除k-1个堆顶元素。 为什么是size / 2 - 1? 考虑最后一个元素的下标 size - 1 那么父节点为 (size - 1) / 2 代码 class Solution { public int findKthLargest(int[] nums,
8
0
0
2642. 设计可以求最短路径的图类(中等)
摘要:核心思想 Dijkstra + 堆优化 模板题,每次查询做一次最短路查询即可。 class Graph { private List<int[]>[] nxt; public Graph(int n, int[][] edges) { nxt = new List[n]; for(int i = 0
4
0
0
3093. 最长公共后缀查询(困难)
摘要:核心思想 倒序的字典树,算是板子题吧。 也就是节点的成员变量有变化。 class Trie{ int idx; // 下标 int length; // 记录以此为后缀且长度最小的长度 Trie[] son; // 儿子 Trie(){ idx = (int) (1e4 + 10); length
8
0
0
3045. 统计前后缀下标对 II(困难)
摘要:核心思想 字典树看灵神把 这里提供一个不同的版本 map存放了int[] 需重写equals 和 hashCode class Node { Map<MyIntArray, Node> son = new HashMap<>(); int cnt; } class MyIntArray{ priva
4
0
0
3091. 执行操作使数据元素之和大于等于 K(中等)
摘要:核心思想 既然只有两种操作 最优解一定是 加1在前 复制在后 所以枚举从哪个数开始一直复制就好 上限就是 ceil(k / 2) class Solution { public int minOperations(int k) { if(k == 1) return 0; int res = (in
9
0
0
2617. 网格图中最少访问的格子数(困难)
摘要:核心思想 比较直观的想法就是BFS,但是每次遍历能走的点(右走,下走)会超时 考虑用两个set数组, TreeSet<Integer>[] R = new TreeSet[n]; TreeSet<Integer>[] C = new TreeSet[m]; R[i]表示第i行还剩下哪些列col没去过
13
0
0
503. 下一个更大元素 II(中等)
摘要:核心思想 维护一个单调递减的单调栈(非严格) 但是由于是循环的,做两次循环即可 代码 public int[] nextGreaterElements(int[] nums) { Deque<Integer> dq = new ArrayDeque<>(); int[] res = new int[
4
0
0
76. 最小覆盖子串(困难)
摘要:核心思想 滑动窗口,先从头开始找到包含t的子串,然后缩短窗口左边界,直到不包含再扩展右边界。 匹配过程: s = "ADOBECODEBANC", t = "ABC" 匹配:"ADOBEC" 缩短:"DOBEC" 匹配:"DOBECODEBA" 缩短:"ODEBA" 匹配:"ODEBANC" 缩短:
9
0
0
239. 滑动窗口最大值(困难)
摘要:核心思想 主要包含两个动作 nums[i]进 和 nums[i-k]出 新元素进入窗口旧元素移出窗口 最大值是谁这个区间各个元素都有可能 所以用一个set记录窗口的值,自定义排序从大到小,每次拿第一个就是最大值 同时用map记录数字出现次数,为0则移出set。 代码 class Solution {
7
0
0
2673. 使二叉树所有路径值相等的最小代价(中等)
摘要:思路 先看只有3个节点的子树,想要路径值相同,只能修改叶子节点的值,如上图只能2去+1操作。 核心思想:那么对于任意左右孩子节点,想要从根节点下来的路径相同,只能修改孩子节点。 所以我们只需要从下至上记录叶子节点到当前节点的路径值(左孩子,右孩子两条路),然后计算左右节点的差值。 详细看灵神树上贪心
16
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起