随笔分类 - 基本盘
基本思路
摘要:使用记忆化递归的时候有这么一个问题,原来if(x<2) return x 但在辅助数组里,怎么给d[1]赋值? 结论是不用,因为递归肯定是从上到下的(整个流程),f[2]先给d[2]赋值,再返回 但f[1]直接返回,d[1]是空的
阅读全文
摘要:双指针的本质是利用传递性,从 n方 降到 n,所以不包括链表的快慢指针 传递性可以表现为有序区间收缩,两边的最值等等 例题切入 右比左最大差值 暴力解法: 固定一个i,然后用一个j不断在右边找,毫无疑问的n方 优化的点: 语义是"i要找最小,j要找最大"。j最大这个没得优化,因为未知的只能遍历。但是
阅读全文
摘要:这是滑窗两个while 不是双指针 一开始想复杂了,比如10101022222 出现第一次2的时候想直接跳到i也就是1的最右(第三次出现位置) 所以觉得一个hash不够用 要存和也要存最后一次的位置 但是其实慢慢挪就可以了 class Solution { public int totalFruit
阅读全文
摘要:你以为考二分?实际考贪心 两个细节: res = 1 ,i--非常帅 这个模板真的强 我又while又for的不体面 private boolean helper(int[] nums, int m, int t){ int cur = t; int res = 1; for(int i = 0;
阅读全文
摘要:只要证明具有二段性,二分法就有用武之地。 基本的两个思路 在循环体里找元素: 好理解 但是不好用 因为分成了三部分,不适合高级情况 在循环体里排除一定不存在的区间(先排除): 好用 分成了两部分并且是没有交集的 要考虑的更少 l = r 的时候就退出,此时只剩下一个元素,直接在外面判断 剩两个元素的
阅读全文
摘要:虽然说是分治,但本质还是语义。语义永远是第一,分治的话考虑相对位置就完事了 https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solution/yi-pian-ti-j
阅读全文
摘要:前缀和的应用场景是,需要对某个区间[i...j]频繁查询累计和,避免每次查询都遍历这个区间。 差分数组的应用场景是,需要对某个区间[i...j]频繁地加或减某一值,避免每次都遍历这个区间。 dif数组本质是对[l,r]区间,dif[l]+=x,dif[r+1]-=x; 使用n的dif数组为什么要判断
阅读全文
摘要:private int GetMaxInN(int[] A,int k){ int len=A.length; int l=0,r=0; //+1是为了对齐 没有其他作用 int[] freq=new int[len+1]; int count=0; int res=0; //基本工作完成了 开始遍
阅读全文
摘要:最多比恰好要好 好很多 所以恰好n可以转换成 最多n-最多n-1 子串和排列的区别: 123 13是排列不是子串
阅读全文
摘要:class U{ int n; int cal; int[] ancinents; int[] bros; public U(U u){ this.n=u.n; this.cal=u.cal; this.ancinents=new int[n]; this.bros=new int[n]; for(
阅读全文

浙公网安备 33010602011771号