摘要: 奥力给 阅读全文
posted @ 2021-09-27 18:00 常熟阿诺 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 使用记忆化递归的时候有这么一个问题,原来if(x<2) return x 但在辅助数组里,怎么给d[1]赋值? 结论是不用,因为递归肯定是从上到下的(整个流程),f[2]先给d[2]赋值,再返回 但f[1]直接返回,d[1]是空的 阅读全文
posted @ 2021-09-27 09:45 常熟阿诺 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 双指针的本质是利用传递性,从 n方 降到 n,所以不包括链表的快慢指针 传递性可以表现为有序区间收缩,两边的最值等等 例题切入 右比左最大差值 暴力解法: 固定一个i,然后用一个j不断在右边找,毫无疑问的n方 优化的点: 语义是"i要找最小,j要找最大"。j最大这个没得优化,因为未知的只能遍历。但是 阅读全文
posted @ 2021-09-26 11:19 常熟阿诺 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 这是滑窗两个while 不是双指针 一开始想复杂了,比如10101022222 出现第一次2的时候想直接跳到i也就是1的最右(第三次出现位置) 所以觉得一个hash不够用 要存和也要存最后一次的位置 但是其实慢慢挪就可以了 class Solution { public int totalFruit 阅读全文
posted @ 2021-09-24 22:09 常熟阿诺 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 你以为考二分?实际考贪心 两个细节: res = 1 ,i--非常帅 这个模板真的强 我又while又for的不体面 private boolean helper(int[] nums, int m, int t){ int cur = t; int res = 1; for(int i = 0; 阅读全文
posted @ 2021-09-24 15:55 常熟阿诺 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 只要证明具有二段性,二分法就有用武之地。 基本的两个思路 在循环体里找元素: 好理解 但是不好用 因为分成了三部分,不适合高级情况 在循环体里排除一定不存在的区间(先排除): 好用 分成了两部分并且是没有交集的 要考虑的更少 l = r 的时候就退出,此时只剩下一个元素,直接在外面判断 剩两个元素的 阅读全文
posted @ 2021-09-22 14:04 常熟阿诺 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 3构建 就是分治 找准位置就行 前后有个n+1所以需要判断 前中 class Solution { //分治 //语义是 [a,b]那么就要根据这个来 Map<Integer,Integer> map = new HashMap<>(); public TreeNode buildTree(int[ 阅读全文
posted @ 2021-09-19 20:23 常熟阿诺 阅读(103) 评论(0) 推荐(0) 编辑
摘要: global error @Data @NoArgsConstructor @AllArgsConstructor public class GlobalException extends RuntimeException { //这个是留给后面用的 什么异常自己注入 private RespBea 阅读全文
posted @ 2021-09-16 23:17 常熟阿诺 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 自定义注解类 使用的时候需要加上@valid @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) @Retention(RUNTIME) @Documented @Constraint(valid 阅读全文
posted @ 2021-09-16 22:40 常熟阿诺 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 从23树说起 另外提一嘴:23树就是b树 最大特点:绝对平衡+不操空 3节点指有两个元素 对三节点的展开 两种情况 为什么等价 查找是2logn 因为保持了黑平衡,而最大的红节点可能一样多,所以查找就是2logn了 插入的元素为什么都是红色? 因为在2树中,都是直接把它当兄弟的,所以是红色。 注意需 阅读全文
posted @ 2021-09-15 18:19 常熟阿诺 阅读(55) 评论(0) 推荐(0) 编辑