
笔记
一抹阳光&
再努力再坚持
展开
-
解决 TypeError: opts.node.rangeBy is not a function
今天遇到的问题,网上寻找一番后发现这个解决方案,但是并不适合,因为我的版本已经高于问题版本。原创 2023-03-01 20:33:53 · 4528 阅读 · 0 评论 -
3. 无重复字符的最长子串 | 字符串搜索 | Map | 哈希
【代码】3. 无重复字符的最长子串 | 字符串搜索 | Map | 哈希。原创 2023-02-19 11:36:38 · 109 阅读 · 0 评论 -
2. 两数相加 | 链表 | 链表长度 | 等价链表长度
总体上可以分为两类,迭代和递归。原创 2023-02-18 00:39:00 · 83 阅读 · 0 评论 -
2022-11-28 Volta | yarn global 安装失败 | Usage Error: No project found
并且几乎所有的配置如 pnpm,yarn 等都放在 NodeJS 目录下,所以想通过 NodeJS 的版本控制工具来实现版本切换。,但是当他查找到我本地已有 NodeJS 程序时,询问是否需要管理本地的程序时我选择了是,然后非常难受的发现我的结构目录都被复制到。是通过链接来实现不同版本控制的,原有数据还有保留,通过重新配置目录与环境变量PATH恢复了,后来在使用过程中发现了。是比较适合我的,我个人偏向于 “有问题能找到答案,不需要踩坑” 的工具,了,也就是说全局安装需要使用。完成了初步安装后,我发现。原创 2022-11-28 17:40:52 · 1088 阅读 · 0 评论 -
25. K 个一组翻转链表 | 链表 | 递归 | 子问题分解
直接实现反转K个一组翻转链表可能非常困难,但是可以分成长度为K的子串,每一个字串分别反转并拼接,最后返回即可。这里采用的是判断 递归 + 是否为null为basecase 实现。分析可以发现,整体的过程就可以分解成长度为。的部分字串,所以明显可以使用递归来实现。反转链表很容易实现,可以通过。原创 2022-09-29 20:57:09 · 223 阅读 · 0 评论 -
92. 反转链表 II | 反转链表 | 反转链表的前N个 | 反转部分链表
如果需要用递归来做这一道题目,需要理解反转链表和反转链表的前N个元素这两个题目。原创 2022-09-19 20:04:59 · 258 阅读 · 0 评论 -
206. 反转链表 | 递归 | 定义递归
定义一个递归函数前,必须要分清楚每一个小过程所做的动作,在此基础上分析最底部也就是理解basecase需要做的动作。递归函数的难点在于如何理清楚程序执行。原创 2022-09-08 22:20:09 · 193 阅读 · 0 评论 -
104. 二叉树的最大深度 | 层序遍历 | 遍历 | 子问题 | TypeScript
利用递归,遍历二叉树,最深的深度应当是一个叶子节点的深度,也就是说没有左右孩子的节点的深度。二叉树几乎所有的问题都可以通过前中后来解决,所以需要较大程度上理解并掌握前中后序的遍历。思路非常的简单,使用队列存储每一层的节点,遍历节点,将节点存入队列,直至所有层被遍历完。遍历二叉树和使用分解二叉树不要搞混了,遍历时就遍历,不要搞拆分分解。这两类思路分别对应着 回溯算法核心框架 和 动态规划核心框架。使用分解子问题的形式统计二叉树的最深深度。二叉树题目的递归解法可以分两类思路。二叉树的数据结构和算法的关键。原创 2022-09-06 22:24:56 · 324 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组 | 双指针 | nSum问题 | 有序数组 | TypeScript
双指针技巧能解决nSum问题,(有序数组)原创 2022-09-05 07:36:43 · 131 阅读 · 0 评论 -
27. 移除元素 | 双指针 | TypeScript
思路简单,但是边界条件一不小心就会出错。原创 2022-09-05 00:14:00 · 177 阅读 · 0 评论 -
26. 删除有序数组中的重复项 | 快慢指针 | TypeScript
对于动态语言来说这是非常容易实现的一道题目,但是作为算法题不应该使用动态语言的优势,如直接生成对象等等。或者觉得上面难以理解的话,可以参考另外一个思路。原创 2022-09-04 00:23:32 · 382 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组 | Map解构 | TypeScript
思路还是比较简单的,target - numbers[i] = num,等式左边便是遍历,等式右边就是需要判断的数据。原创 2022-09-03 20:23:00 · 314 阅读 · 0 评论 -
160. 相交链表 | 循环交替 | 双指针
在交替的时候就有: 3 + 4 === 4 + 3,如果在这个过程中出现了相等节点就返回,如果没有出现相等,那么最终n1=以最简单的例子来说:一个链表包含相交的长度的为3,另外一个链表包含相交的长度为4。通过循环交替来判断是否相交,最多只需要交替两次就可以结束判断。=null,这是一个巧妙之处。原创 2022-09-03 00:39:02 · 176 阅读 · 0 评论 -
力扣打卡:142. 环形链表 II | 快慢指针 | 双指针
链表中与位置有关的计算都可以考虑使用快慢指针,左右指针,如倒数第N个节点,删除倒数第N个节点,中间节点等。原创 2022-09-02 23:03:14 · 252 阅读 · 0 评论 -
力扣打卡:23. 合并K个升序链表 | 链表 | 合并链表
注意:如果需要原有的数组,那么需要注意数组长度的使用应该是新长度;如果是构建新数组使用则无此问题。遍历数组链表元素,合并其中的两个,不再是单独合并一个。遍历链表数组,合并每一条链表。原创 2022-09-01 23:15:33 · 141 阅读 · 0 评论 -
力扣打卡:86. 分隔链表 | 分隔排列
值得注意的是:需要去除每一个节点的next,否则可能会出现环。顺序遍历原链表,检查每一个节点并添加即可。原创 2022-09-01 12:22:10 · 152 阅读 · 0 评论 -
JS-知识盲区 | async & await的认识
解析注意:async修饰的函数是一个同步执行的函数,但是当遇到了await,await后的所有代码块变为了微任务,如果再遇到了await,此时是上一个await的then中的任务,也就是微任务,此时能够从生成器和Promise结合中进行解释。最主要的还是async和await的同步的异步(微任务,比Promise优先级更高)。.........原创 2022-06-16 00:14:45 · 297 阅读 · 1 评论 -
Promise理解:发布功能中的Promise
Promise三种传值方式的实践理解,通过then更好的管理流程原创 2022-06-11 08:49:44 · 103 阅读 · 0 评论 -
前端Promise实现(二) | 初级版本的实现
/* =====================版本二========================== *//** * 版本二 * 可以发现,版本一中的ES5的回调写法在业务复杂之后会形成回调地狱,难以维护的。 * 版本二来初步探讨Promise的实现功能, * 为什么Promise能够解决或者是说极大的减轻了这种回调地狱 *//** * 先来看Promise利用的原理:利用new操作符,自动执行constructor函数 * * 毫无疑问的,Person的construct原创 2022-05-04 22:23:30 · 380 阅读 · 0 评论 -
前端Promise实现(一) | 传统的ES5的回调写法
传统的ES5的回调写法function foo(url) { let res = null setTimeout(() => { // 模拟网络请求 if(url === 'hello') res = "成功!" else res = '失败!' }, 2000) return res}let res = foo('hello')console.log(res) // null这样是拿不到结果的,只能拿到null,因为JS原创 2022-05-04 22:17:39 · 546 阅读 · 0 评论 -
蓝桥杯 | 国赛 | 2021 | LocalDate | Java时间类
问题描述如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。例如:2021 20212021 年 6 66 月 5 55 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 5 = 16 2 + 0 + 2 + 1 + 6 + 5 = 162+0+2+1+6+5=16,而 16 1616 是一个完全平方数,它是 4 44 的平方。所以 2021 20212021 年 6 66 月 5 55 日是一个完全日期。例如:2021 20212021 年 6 66 月 23 2323原创 2022-04-08 22:36:32 · 648 阅读 · 0 评论 -
子串分值和 | 递归 | 动态规划 | 递推
题目描述对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中出现的不同的字符个数。例如 f(“aba”) = 2,f(“abc”) = 3, f(“aaa”) = 1f(“aba”)=2,f(“abc”)=3,f(“aaa”)=1。现在给定一个字符串 S [0…n − 1]S[0…n−1](长度为 nn),请你计算对于所有 SS 的非空子串 S [i…j](0 ≤ i ≤ j < n)Si…j,f(S [i…j])f(S[i…j]) 的和是多少。递推思路正常的思原创 2022-04-07 23:55:46 · 863 阅读 · 0 评论 -
力扣打卡:101. 对称二叉树 - 递归 明确一个递归函数的定义
力扣打卡:101. 对称二叉树解题思路从顶开始,检查左右两个节点是否相同,然后检查左节点的左孩子和右节点的右孩子 以及 左节点的右孩子和右节点的左孩子,就能很大程度上避免写条件的麻烦,因为每次检测都是在对比上层是否堆成对于一个节点(二叉树),只需要判断其值和左右孩子是否对称,如果不对称,那么无需继续判断。如果对称,则判断另外三个父子节点了。写递归函数,一定要明确这个函数的意义是什么,即使刚开始不知道怎么如何开始,只需要按照定义去写,大的方向就不会错流程明确check函数是检查两个子原创 2022-03-01 21:50:21 · 308 阅读 · 0 评论 -
MyBatis中resultType和resultMap的区别
MyBatis中resultType和resultMap的区别在使用MyBatis时,需要使用的时mapper.xml映射文件,结果集的返回大致是两种 resultType 和 resultMap, 那么这两者有什么区别和联系呢?resultType用来处理非常简单的结果集,就是列名能够与实体类属性匹配的的结果集(mybatis使用驼峰命名(student_id ⇒ studentId)也可以,但是字段必须要匹配)resultMap更擅长来处理复杂映射的结果集。比如一对一、一对多的复杂关系。最简原创 2021-12-27 23:56:22 · 1152 阅读 · 0 评论 -
55. 跳跃游戏 | 暴力递归 | 暴力求解 | 自顶向下 | 自底向上 | 动态规划
力扣打卡:55. 跳跃游戏解题思路分析状态分析题目给定的要求 0 号位置是否可以到达最后一个节点,那么需要求在跳跃范围内的每一个节点是否可以到达最后一个节点对于每一个元素的跳跃范围内的各个元素,只需要一个可以到达最后一个节点,那么当前的这个节点就可以到达最后一个节点暴力递归对于当前的元素,只要跳跃范围内的元素有一个可以到达最后一个节点,那么当前节点就可以到达最后一个节点对于当前的元素的跳跃范围内的元素,只要其自身的跳跃范围内内的元素有可以到达最后一个节点的,那么可以到达最后一个节点依次类原创 2021-12-18 12:59:51 · 1908 阅读 · 0 评论 -
198. 打家劫舍 | 动态规划 | 暴力递归 | 自顶向下分析
力扣打卡:198. 打家劫舍解题思路理解题目给定一组数组,找到数组中,一组和最大的序列对于数组中的每一个元素对于其和其后的元素,都有一个最大的序列注意题目中的寻找所有可能的过程中:就是回溯的过程,这个也就是动态规划和回溯的重要区别,动态规划能够消除重复的子问题具体来看看 planA() 纯暴力递归public int planA(int p, int[] nums){ if(p>nums.length-1) return Integer.MIN_VALUE; // 将整数的原创 2021-12-17 16:10:53 · 384 阅读 · 0 评论 -
494. 目标和 | 回溯 | 暴力求解 | 暴力递归
力扣打卡:494. 目标和解题思路理解题意:需要找到每一个可能,那么可以想到回溯法,也可以想到动态规划(关键是有没有重叠子问题)回溯做回溯前,先要弄清除对象是什么,所有的可能是什么,然后按照框架将对象遍历,定义的递归函数将可能遍历。最后统计结果对于需要遍历的对象,根据题目所给,每个数组元素都可以有正负两种状态那么也就是说需要遍历的对象是每个数组元素,这个递归好做,控制一个指针,从头到尾即可每个元素都可以有正负两种状态,也就是说:两种可能,一个是正,一个是负,for循环遍历框架,直接写成原创 2021-12-17 12:06:49 · 485 阅读 · 1 评论 -
343. 整数拆分 | 暴力求解 | 暴力递归 | 动态规划 | 自顶向下分析
力扣打卡:343. 整数拆分解题思路可能思路不是很好想到大于1的每一个数至少分成 1 + n-1 | 2 + n-2 | ...根据上面的分解,每一个大于1的数都可以分解成至少两个整数,那么这两个分解生成的两个整数如果同样属于大于1的这个范围那么可以继续分解,此时每一个数都可以分解成 2个 或者 n个 的数字的和如果从两个开始分,2,3,4,5,6 …分解下去,总是能找到乘积最大的时候流程函数先分解成两个数 for(int i=1; i<n; i++) ,1+n-1 | 2+n-原创 2021-12-16 23:24:51 · 197 阅读 · 0 评论 -
77. 组合 | 暴力求解 | 组合 | 暴力递归 | 回溯
力扣打卡:77. 组合解题思路需要求解所有的可能, 并且没有子问题重复的题目,那么一定是暴力求解,可以考虑回溯回溯的框架// 常用的结果储存List<T> track = new LinkedList<>();List<List<T>> res = new LinkedList<>();public void backtrack(){ // 先将需要的参数确定下来,然后一边写流程一边考虑是否加参数 if(终止条件){原创 2021-12-15 15:57:32 · 1051 阅读 · 0 评论 -
51. N 皇后 | 回溯算法 | 暴力求解 | 组合 | 选择
力扣打卡:51. N 皇后解题思路用数组来代替字符串数组回溯算法的框架List<T> track = new LinkedList<>();List<List<T>> res = new ArrayList<>();public void backtrack(){ if(终止条件) { 记录结果 return; } for(所有的结果){ 1. 做结果原创 2021-12-15 12:25:00 · 416 阅读 · 0 评论 -
46. 全排列 | 排列组合 | 回溯 | 暴力穷举
力扣打卡:46. 全排列解题思路回溯算法的流程对于需要列出所有的可能,同时没有子问题的重叠类型,那么一定需要用到回溯法,也就是暴力列举所有的可能回溯算法的框架//常用的结果集List<T> list = new LinkedList<>();List<List<T>> = new LinkedList<>();pblic void backtrack(){ if(终止条件){ 增加结果集,退回上一层原创 2021-12-15 10:50:12 · 479 阅读 · 0 评论 -
53. 最大子数组和 | 动态规划 | 暴力递归 | 自顶向下分析
力扣打卡:53. 最大子数组和解题思路暴力递归的状态分析:对于数组的每一个元素,它的最大值必定是紧接相邻的元素的最大值而紧接相邻元素的最大值必定是其紧接相邻的最大值最终的结果是:到数组的末尾元素,子数组的最大值就是其自身也就是从 每一个元素开始·向后组合·,以每个元素开始的子数组的最大值必定是每个元素(i)的值 + 每个元素后面的元素(i+1)的最大值basecase就是,到数组的末尾元素,那么子数组的最大值就是其自身注意每次写暴力递归的时候,状态转移就是给出的行为或者是动作,如果一原创 2021-12-14 10:05:00 · 1196 阅读 · 0 评论 -
931. 下降路径最小和 | 动态规划 | 暴力递归 | 自顶向下
力扣打卡:931. 下降路径最小和解题思路写动态规划,最重要的还是找出当前的状态和子问题状态之间的转移方程状态转移的方程:一般都是题目中给定的行为或者动作从题中分析:找到第一行的最小下降路径和,给定的每一个节点都有三个路径(行为)左下角下角右下角每一个节点的最小值都是这三个子问题中的最小值,加上自身的值,这个就是状态转移的过程定义暴力递归函数的时候定义的函数就是可以求出子问题的结果写暴力递归函数不要想和任何的优化不要乱定义参数,必须要分析出一定结果后再进行编写一定要想着:自原创 2021-12-13 23:49:52 · 950 阅读 · 0 评论 -
748. 最短补全词 | 字符串的模拟题
力扣打卡:748. 最短补全词解题思路字符串的模拟题先将字符串 licensePlate 映射到数组上,得到需要的字符数量设置最长长度是 Integer.MAX_VALUE对字符串数组的每一个元素进行遍历统计字符串数组中每一元素的字符数量比较字符串数组的每一个元素的字符数量和 licensePlate如果不满足那么跳转判断下一个字符串数组的元素如果满足条件判断长度是否符合要求符合要求更新 ans 和 len返回 ans代码class Solution { public原创 2021-12-10 22:29:26 · 323 阅读 · 0 评论 -
746. 使用最小花费爬楼梯 | 动态规划 | 暴力递归 | 自顶向下
力扣打卡:746. 使用最小花费爬楼梯解题思路动态规划的题目还是要写出暴力递归的方法后再去优化流程暴力递归最关键的是怎么找到状态转移的方程状态转移的方程也就是当前的状态和子问题状态之间的联系怎么得到子问题和当前状态之间的联系呢? 需要用到暴力递归的函数暴力递归的函数就是求出每一个问题的解,子问题的解如斐波那契数列,需要两个数的和,那么定义的函数就是求出了前第一个和前第二个函数不要想着自己定义的函数能否求出来每次写递归函数: 直接调用函数就就可以得到需要的答案这样写递归函数的时候才不原创 2021-12-09 19:10:36 · 327 阅读 · 0 评论 -
70. 爬楼梯 | 动态规划 | 暴力递归 | 自顶向下
力扣打卡: 70. 爬楼梯解题思路还是一样分析当前的状态和子问题的状态有什么关联重点定义函数的时候不要想着这个函数是否可以得到结果定义函数的时候就一定要认为这个函数能够得到问题的结果写暴力递归的时候不要想着任何的优化,将暴力递归写出来了,那么自顶向下的动态规划就是多了判断和记录的两个过程分析问题状态的分析一般都是给定的行为动作只能向右走或者向下走 ( 问题: 求出路径的个数 或者 求出怎么走,能够得到最大的结果 杨辉三角)只能走一步或者走两步或者走三步 ( 问题: 求出原创 2021-12-09 12:42:09 · 1019 阅读 · 0 评论 -
1137. 第 N 个泰波那契数 | 动态规划 | 暴力递归 | 自顶向下
力扣打卡:1137. 第 N 个泰波那契数解题思路其实最重要的是怎么写出来暴力递归的方法重要的是不要在写暴力递归时,想着任何的优化操作重要的是不要在写暴力递归时,想着怎么定义函数重要的是理解:自己定义的函数就是能够得到子问题的结果,需要什么子问题的结果,直接调用就可以了不要怀疑这个函数能不能得到结果,如果不能,那么定义这个函数做什么呢?直接调用函数,得到的就是子问题的结果,然后与当前的状态进行联系就可代码class Solution { public int tribonacc原创 2021-12-08 23:14:24 · 324 阅读 · 0 评论 -
蓝桥杯 | 时间显示 |语言时间函数 | 计算时间
蓝桥杯打卡:时间显示题目描述 * 【问题描述】 小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取 了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时 刻经过的毫秒数。 现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要 显示出时分秒即可,毫秒也不用显示,直接舍去即可。 给定一个用整数表示的时间,请将这个时间对应的时分秒输出。 【输入格式】 输入一行包含一个整数,表示时间。 【输出格式】 输出时分秒表示的当前时间原创 2021-12-07 10:29:36 · 6589 阅读 · 0 评论 -
蓝桥杯打卡 | 统计数字出现的个数 | 数组的作用
蓝桥杯打卡:卡片题目 * 【问题描述】 小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。 例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10, 但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。 现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少原创 2021-12-06 22:34:22 · 241 阅读 · 0 评论 -
1816. 截断句子 | 遍历
力扣打卡:1816. 截断句子解题思路使用 k 这个变量进行检查即可检查空格数,当 k 为 0 时,那么跳出循环注意 p 的位置代码class Solution { public String truncateSentence(String s, int k) { // 使用空格判断即可 int len = s.length(); int p = 0; for(char c: s.toCharArray())原创 2021-12-06 19:31:17 · 76 阅读 · 0 评论