![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 53
Three_ST
学习者
展开
-
数据结构与算法之 leetcode 78. 子集
【代码】数据结构与算法之 leetcode 78. 子集。原创 2024-06-27 10:54:16 · 130 阅读 · 0 评论 -
数据结构与算法之 leetcode 47. 全排列 II (回溯)
【代码】数据结构与算法之 leetcode 47. 全排列 II (回溯)原创 2024-06-17 18:40:52 · 228 阅读 · 0 评论 -
数据结构与算法之 leetcode 103. 二叉树的锯齿形层序遍历
【代码】数据结构与算法之 leetcode 103. 二叉树的锯齿形层序遍历。原创 2024-06-11 10:08:36 · 144 阅读 · 0 评论 -
数据结构与算法之 leetcode 513. 找树左下角的值 (BFS) 广度优先
【代码】数据结构与算法之 leetcode 513. 找树左下角的值 (BFS) 广度优先。原创 2024-06-05 19:00:00 · 274 阅读 · 0 评论 -
数据结构与算法之 leetcode 102. 二叉树的层序遍历
【代码】数据结构与算法之 leetcode 102. 二叉树的层序遍历。原创 2024-06-05 08:00:00 · 183 阅读 · 0 评论 -
数据结构与算法之LeetCode-640. 求解方程
- factor表示变量的系数,val表示常量值- 使用系数sign1表示默认系数,解析到等号时,说明解析到等式右边的项,令sign1 = -1- 使用sign2表示项的符号,初识时sign2 = sign1 。解析到‘+’,‘-’,要么相应的更改sign2,使用number记录数字,valid表示number是否有效- 如果解析到变量,那么相应的更改factor- 如果解析到的是常量项,那么相应的更改val- 如果factor=0,说明变量x对方程无影响,然后判断val=0 是否成立,成立则说明原创 2022-10-31 23:05:17 · 107 阅读 · 0 评论 -
数据结构与算法之-641. 设计循环双端队列 - 力扣(LeetCode)
循环队列原创 2022-10-27 23:03:35 · 224 阅读 · 0 评论 -
数据结构与算法之LeetCode-652. 寻找重复的子树 - 力扣(1024程序员节)
寻找重复的字数原创 2022-10-24 21:46:14 · 250 阅读 · 0 评论 -
数据结构与算法之LeetCode-828. 统计子串中的唯一字符 - 力扣
设字符c位于[left, right]中的idx且c唯一, 那么c出现的次数为它左边包含它的个数乘它右边包含它的个数 [即(idx + 1 - left) * (right + 1 - left)]。所以我们只需要统计每个字符出现的所有间隔坐标即可。原创 2022-10-21 21:53:11 · 315 阅读 · 0 评论 -
数据结构与算法之二分查找
在循环条件为 l原创 2022-09-28 21:17:21 · 887 阅读 · 0 评论 -
数据结构与算法之LeetCode-662. 二叉树最大宽度 -(DFS,BFS)
- 根节点的位置为1(index- 左子节点的位置就为1*2- 右子节点的位置就为1*2+1 - 节点下标会非常大(2**3000)个子节点,超过JS的number范围,因此需要使用bigint避免溢出原创 2022-08-29 23:09:14 · 311 阅读 · 0 评论 -
数据结构与算法之LeetCode-1413. 逐步求和得到正数的最小值(贪心与排序)
贪心,排序原创 2022-08-09 21:04:29 · 1075 阅读 · 0 评论 -
数据结构与算法之LeetCode-剑指 Offer II 091. 粉刷房子-动态规划-DP
剑指 Offer II 091. 粉刷房子 - 力扣(LeetCode)当前刷红,上一个只能是蓝或绿,所以由上一次蓝绿最小值加上当前红的代价得到。参考链接剑指 Offer II 091. 粉刷房子 - 力扣(LeetCode)粉刷房子 - 粉刷房子 - 力扣(LeetCode)【宫水三叶】简单状态机 DP 运用题 - 粉刷房子 - 力扣(LeetCode)[Python/Java/TypeScript/Go] 动态规划 - 粉刷房子 - 力扣(LeetCode)...原创 2022-06-25 23:38:46 · 299 阅读 · 0 评论 -
数据结构与算法之LeetCode-515. 在每个树行中找最大值(DFS,BFS)
515. 在每个树行中找最大值 - 力扣(LeetCode)DFS,BFS 数据结构与算法BFS参考链接515. 在每个树行中找最大值 - 力扣(LeetCode)在每个树行中找最大值 - 在每个树行中找最大值 - 力扣(LeetCode)【宫水三叶】树的搜索运用题 - 在每个树行中找最大值 - 力扣(LeetCode)在每个树行中找最大值【BFS和DFS】 - 在每个树行中找最大值 - 力扣(LeetCode)...原创 2022-06-24 22:35:32 · 238 阅读 · 0 评论 -
数据结构与算法之LeetCode-513. 找树左下角的值 - 力扣(DFS,BFS)
513. 找树左下角的值 - 力扣(LeetCode)数据结构与算法,DFS,BFS,深度优先搜索,广度优先搜索BFS遍历每一层节点,遍历每一个节点时,需要先把它的非空右子节点放入队列,然后再把非空左子节点放入队列,这样才能保证从右到左遍历每一层节点BFS所遍历的最后一个节点的值就是最底层最左边的节点参考链接513. 找树左下角的值 - 力扣(LeetCode)找树左下角的值 - 找树左下角的值 - 力扣(LeetCode)......原创 2022-06-23 23:10:55 · 199 阅读 · 0 评论 -
数据结构与算法-890. 查找和替换模式 - 力扣(LeetCode)字符串匹配
- 判断字符出现的位置,如果重复出现只取第一次出现的位置- 分割words,按照相同规则取值,然后判断是否成立原创 2022-06-12 22:50:16 · 778 阅读 · 0 评论 -
数据结构与算法之LeetCode-467. 环绕字符串中唯一的子字符串(动态规划速度100%)
467. 环绕字符串中唯一的子字符串 - 力扣(LeetCode)DPs是周期性字符串,在s的子串中,只要知道子串的第一个字符或者最后一个字符和子串长度,就可以确定这个子串。例如如果子串以‘d’结尾,长度为3,那么该子串为’bcd’对于同一个字符串结尾的字符,长的那个子串必然包括短的那个。例如’abcd’和’bcd’都以‘d’结尾,’bcd’是‘abcd’的子串var findSubstringInWraproundString = function{p){ const dp = new A原创 2022-05-25 21:38:40 · 118 阅读 · 0 评论 -
数据结构与算法之LeetCode-824. 山羊拉丁文
824. 山羊拉丁文 - 力扣(LeetCode) (leetcode-cn.com)按照题目解释 判断是否是元音字母非元音字母倒序 放在最后添加 ma添加 n个 a/** * @param {string} sentence * @return {string} */var toGoatLatin = function(sentence) { let vowels = ['a','e','i','o','u']; let res = []; let temp原创 2022-04-21 22:23:36 · 1134 阅读 · 0 评论 -
数据结构与算法之leetcode-385. 迷你语法分析器 - 力扣使用递归和栈实现
385. 迷你语法分析器 - 力扣(LeetCode) (leetcode-cn.com)递归dfs判断开头的是否是’[’, ‘-’判断结束标志,以及是否嵌套数组var deserialize = function(s) { let index = 0; const dfs = (s) => { if (s[index] === '[') { index++; const ni = new NestedInte原创 2022-04-15 23:14:54 · 1045 阅读 · 0 评论 -
数据结构与算法之LeetCode-38-外观数列(递归和枚举实现 超过97%的提交)
38. 外观数列 - 力扣(LeetCode) (leetcode-cn.com)递归结合题意,实现一个hash表,存储前面的数据,然后大于10的从后面提取/** * @param {number} n * @return {string} */var countAndSay = function(n) { const map = new Map(); map.set(1,'1'); map.set(2,'11'); map.set(3,'21'); m原创 2022-04-06 22:14:23 · 984 阅读 · 0 评论 -
数据结构与算法之LeetCode-463-求解岛屿的周长 深度遍历(DFS)
463 岛屿的周长解题思路:使用深度遍历 DFS ,出现两种情况:遍历到的节点是网格边界节点,海洋的边界节点- 海洋的边界节点 grid[r][c]===0- 网格的边界节点 r<0||r>=grid.length||c<0||c>=grid[0].length将遍历过的陆地节点标记为2 grid[r][c]===2,防止重复计算var islandPerimeter = function(grid){ const n = grid.length; co原创 2022-04-05 19:55:12 · 201 阅读 · 0 评论 -
数据结构与算法之LeetCode-142-环形链表II(使用哈希和双指针求解)
142. 环形链表 II - 力扣(LeetCode) (leetcode-cn.com)哈希表保存遍历结果,如果出现相同的则返回var detectCycle = function(head){ const visited = new Set(); while(head!==null){ if(visited.has(head)){ return head; } visited.add(head); head = head.next; }原创 2022-03-22 23:23:56 · 1300 阅读 · 0 评论 -
数据结构与算法之LeetCode-31-下一个排列(使用字典序,什么是字典序)
31. 下一个排列 - 力扣(LeetCode) (leetcode-cn.com)字典序(dictionary order),又称 字母序(alphabetical order),原意是表示英文单词在字典中的先后顺序,在计算机领域中扩展成两个任意字符串的大小关系。/** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */var nextPermut原创 2022-03-13 09:55:54 · 220 阅读 · 0 评论 -
数据结构与算法之LeetCode-136-只出现一次的数字(位运算)
136. 只出现一次的数字 - 力扣(LeetCode) (leetcode-cn.com)题解考虑到题目要求时间具有线性时间复杂度,同时不用额外空间,想到了就在原数组上做操作:先排序,变成有序数组有序数组,按照题目条件,每个元素要么出现一次,要么出现两次出现两次的数字,在排序后会挨在一起取连续的两个数字,判断数字是否相等因为有可能取到最后的数组,就是一个奇数数组,因此就会是当前的结果如果出现一次的出现在中间就会是两个中的第一个数字/** * @param {number[]} nu原创 2022-03-09 21:42:05 · 1061 阅读 · 0 评论 -
数据结构与算法之LeetCode-125.验证回文串(正则匹配与双指针)
125. 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)##### 解法利用正则表达式 只保留数字和字符let newS = s.toLowerCase().match(/[a-z0-9]+/g);console.log(newS);// ['i','am', 'bill', 'llib', 'ma', ]// 使用match方法在字符串内索引指定值/找到一个或多个正则表达式的匹配// 查找从a到z的字符,并返回匹配值var isPalindrome = f原创 2022-03-07 22:45:34 · 394 阅读 · 0 评论 -
数据结构与算法之LeetCode-10.10-数字流的秩(树状数组,什么是树状数组)
面试题 10.10. 数字流的秩 - 力扣(LeetCode) (leetcode-cn.com)var StreamRank = function() { this.arr = new Array(50001).fill(0);};/** * @param {number} x * @return {void} */StreamRank.prototype.track = function(x) { this.arr[x] += 1;};/** * @param {numb原创 2022-02-27 10:41:04 · 122 阅读 · 0 评论 -
数据结构与算法之LeetCode-72-编辑距离
72. 编辑距离 - 力扣(LeetCode) (leetcode-cn.com)/** * @param {string} word1 * @param {string} word2 * @return {number} */var minDistance = function (word1, word2) { let dp = Array.from(Array(word1.length + 1), () => Array(word2.length + 1).fill(0)原创 2022-02-24 22:16:05 · 628 阅读 · 0 评论 -
数据结构与算法之LeetCode-201-数字范围按位与
201. 数字范围按位与 - 力扣(LeetCode) (leetcode-cn.com)位运算/** * @param {number} left * @param {number} right * @return {number} */var rangeBitwiseAnd = function(left, right) { while(right>left){ right&=(right-1) } return right;};原创 2022-02-13 11:37:17 · 366 阅读 · 0 评论 -
数据结构与算法之LeetCode-300-最长递增子序列
300. 最长递增子序列 - 力扣(LeetCode) (leetcode-cn.com)动态规划两层遍历计算第二层遍历中是否增加/** * @param {number[]} nums * @return {number} */var lengthOfLIS = function(nums) { if(nums.length == 0){ return 0; } let dp = new Array(nums.length).fill(0); dp[0原创 2022-02-05 15:23:28 · 732 阅读 · 0 评论 -
数据结构与算法之 Leetcode-1091-二进制矩阵中的最短路径
1091. 二进制矩阵中的最短路径BFS 广度优先遍历在用广度优先搜索的时候,脑海里面有一张如下的图:先把起始点加入到队列当中,最外层的while控制只要队列中有元素就一直循环取队头元素进行扩散第二个for循环(或者简写方法的while循环)主要是控制当前这一层的元素的扩散每次都是取队头元素进行扩散题目当中可以对当前元素的四面八方进行扩散,所以声明了一个directions数组方便循环扩散/** * @param {number[][]} grid * @return {numb原创 2022-01-28 10:38:47 · 1225 阅读 · 0 评论 -
数据结构与算法之LeetCode-15-三数之和
15.三数之和二分法 先确定一个初始位置再用下一个位置,与最后的位置开始二分搜索不断向中间搜索确定一个终止位置/** * @param {number[]} nums * @return {number[][]} */var threeSum = function(nums) { let ans = []; const len = nums.length; if(nums == null || len < 3) return ans; nums.so原创 2022-01-23 22:26:26 · 633 阅读 · 0 评论 -
数据结构与算法之LeetCode 844. 比较含退格的字符串
844. 比较含退格的字符串使用栈考虑题目要求遇到退格符号,就会删除前一个字符,一般想法是在下一个数字是退格符号时,将前一个符号从字符串中删除,这个时候想到可以使用栈这个结构来保存字符串。/** * @param {string} s * @param {string} t * @return {boolean} */var backspaceCompare = function(s, t) { return build(s)==build(t);};var build = f原创 2022-01-22 13:59:51 · 470 阅读 · 0 评论 -
数据结构算法之二分搜索查找多位矩阵中的数据
74. 搜索二维矩阵在一个m*n维矩阵中搜索某一个给定值,如果存在则返回true,如果不存在则返回 false一次二分法使用解题想法,根据前面 33题的解题思路,使用搜索算法,先计算数组的行数m和n得到起始位 start = 0终止位 end = m*n - 1中间位 mid = start + ((end-start)>>1)判断当前值处于那个区间取出数组的开始和末尾两个数比较中位数与目标值之间的差距(如果处于 start-》mid 区间,处于mid-end区间)逐渐原创 2022-01-05 22:11:40 · 561 阅读 · 0 评论 -
数据结构与算法之Leetcode-深度遍历与广度遍历(DFS&BFS)
DFS(深度优先搜索)和 BFS(广度优先搜索)就像孪生兄弟,提到一个总是想起另一个。然而在实际使用中,我们用 DFS 的时候远远多于 BFS。那么,是不是 BFS 就没有什么用呢?如果我们使用 DFS/BFS 只是为了遍历一棵树、一张图上的所有结点的话,那么 DFS 和 BFS 的能力没什么差别,我们当然更倾向于更方便写、空间复杂度更低的 DFS 遍历。不过,某些使用场景是 DFS 做不到的,只能使用 BFS 遍历。这就是本文要介绍的两个场景:「层序遍历」、「最短路径」。var dfs = funct原创 2021-12-25 23:15:04 · 210 阅读 · 0 评论 -
LeetCode-653-两数之和IV(利用中序遍历递归求解)
两数之和 IV - 输入 BST解题思路:受到BST使用中序遍历后会出现从小到大依次排序,同时利用这个特性,可以使用for循环,再利用数组的特性找到某个数值(target-currentValue)是否存在的下标同时不能出现重复原创 2021-12-13 21:10:46 · 3485 阅读 · 0 评论 -
数据结构与算法之LeetCode-二叉树遍历(JavaScript递归实现)
通过递归实现二叉树的遍历二叉树的前序/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right)原创 2021-12-08 23:11:41 · 735 阅读 · 0 评论 -
LeetCode-1404 将二进制表示减到1的步骤数
1404. 将二进制表示减到 1 的步骤数给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:如果当前数字为偶数,则将其除以 2 。如果当前数字为奇数,则将其加上 1 。题目保证你总是可以按上述规则将测试用例变为 1 。numberProcess(num){ }...原创 2021-11-29 23:13:51 · 151 阅读 · 0 评论 -
LeetCode 88 合并两个有序数组(slice)
array.splice(start[, deleteCount[, item1[, item2[, …]]]])参数start指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素并且等价于array.length-n);如果负数的绝对值大于数组的长度,则表示开始位置为第0位。deleteCount 可选整数,表示要移除的数组元素的个数。如果 deleteCount 大于 star.原创 2021-11-12 00:03:34 · 126 阅读 · 0 评论 -
计算机基础知识之Unicode-彻底弄懂 Unicode 编码
彻底弄懂 Unicode 编码前言为什么要有编码?大家需要明确的是在计算机里所有的数据都是字节的形式存储、处理的。我们需要这些字节来表示计算机里的信息。但是这些字节本身又是没有任何意义的,所以我们需要对这些字节赋予实际的意义。所以才会制定各种编码标准。编码模型首先需要明确的是存在两种编码模型A:简单字符集在这种编码模型里,一个字符集定义了这个字符集里包含什么字符,同时把每个字符如何对应成计算机里的比特也进行了定义。例如 ASCII,在 ASCII 里直接定义了 A -> 0100 000转载 2021-05-19 22:49:26 · 11497 阅读 · 2 评论 -
数据结构与算法之LRU缓存算法
LRU是什么LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。LRU作为页面置换算法,常见的页面置换算法如下常见的页面置换算法有如下几种:LRU 最近最久未使用FIFO 先进先出置换算法 类似队列OPT 最佳置换算法 (理想中存在的)NRU Clock置换算法LFU 最少使用置换算法PBA 页面缓冲算法最常见的实现是使用一个链表保存缓存数据,详细算法实现如下新数据原创 2021-05-15 18:18:36 · 546 阅读 · 0 评论