随笔分类 -  算法和数据结构

摘要:1.二叉树最大深度 思路: 如果节点为空 (root null),表示这一部分的深度是 0。 如果节点不为空,递归地计算左子树和右子树的深度,然后返回左右子树深度的最大值加上 1(表示当前节点的深度) 代码实现: function maxDepth(root) { // 基本情况:如果节点为空,深度 阅读全文
posted @ 2025-03-26 19:50 我是格鲁特 阅读(11) 评论(0) 推荐(0)
摘要:问题描述: 给定一个整数数组 nums,要求找到一个连续的子数组(至少包含一个元素),使得该子数组的和最大。返回这个最大和 输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 子数组 [4,-1,2,1] 的和最大,为 6。 解决方法 这个问题可以使用动态规划来求解。 动态规划转 阅读全文
posted @ 2025-03-26 15:44 我是格鲁特 阅读(16) 评论(0) 推荐(0)
摘要:爬楼梯问题是一个经典的动态规划问题,通常表述为:一个人站在楼梯的底部,每次可以选择爬 1 级或 2 级楼梯,问到达楼顶有多少种不同的方式。 问题分析 每次可以选择向上爬 1 层楼梯,或者 2 层楼梯。 假设我们在第 n 层楼梯,那么在到达第 n 层楼梯时,前一步可以是从第 n-1 层楼梯爬上来的,或 阅读全文
posted @ 2025-03-26 11:38 我是格鲁特 阅读(88) 评论(0) 推荐(0)
摘要:一个峰值元素是指一个元素,它大于或等于它的左右邻居(如果有的话)。 问题描述 给定一个整数数组 nums,请找出其中的一个峰值元素,并返回它的索引。 你可以假设数组的左右边界的元素永远是负无穷。 例如,nums = [1, 2, 3, 1],则峰值元素是 3,返回其索引 2。 解法思路 我们可以利用 阅读全文
posted @ 2025-03-25 20:21 我是格鲁特 阅读(15) 评论(0) 推荐(0)
摘要:常数时间 O(1) 指的是无论数据量多大,操作的执行时间都保持恒定不变,不会随着输入规模增加而增加。换句话说,不管栈中有 10 个元素还是 10 万个元素,执行某个操作(如获取最小元素)所需的时间都是一样的。 例: 示例: MinStack minStack = new MinStack(); mi 阅读全文
posted @ 2025-03-25 19:00 我是格鲁特 阅读(37) 评论(0) 推荐(0)
摘要:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效,例: 输入:() -> 返回 true 输入:()[]{} -> 返回 true 输入:(] -> 返回 false 输入:([)] -> 返回 false 输入:{[]} -> 返回true 示例表 阅读全文
posted @ 2025-03-25 18:17 我是格鲁特 阅读(136) 评论(0) 推荐(0)
摘要:https://zhuanlan.zhihu.com/p/9179488776 阅读全文
posted @ 2025-03-25 16:31 我是格鲁特 阅读(10) 评论(0) 推荐(0)
摘要:哈希表是什么 是一种用于存储键值对(key-value pair)的数据结构。在哈希表中,通过哈希函数将键(key)映射到数组的某个位置(索引),然后在该位置存储对应的值(value)。 哈希表适用于处理需要根据键快速查找的场景,如数据库索引、缓存等。 哈希表的关键特性: 键的唯一性:每个键在哈希表 阅读全文
posted @ 2025-03-09 23:15 我是格鲁特 阅读(44) 评论(0) 推荐(0)
摘要:链表(Linked List)是一种线性数据结构,它由一系列的节点组成,其中每个节点包含两部分: 数据部分:存储节点的实际数据。 指针部分:存储指向下一个节点的引用(或指针)。 与数组不同,链表中的元素不需要在内存中是连续的。每个节点通过指针连接到下一个节点,形成一个链式结构。 链表有多个变种,包括 阅读全文
posted @ 2025-03-09 23:04 我是格鲁特 阅读(19) 评论(0) 推荐(0)
摘要:栈(Stack) 栈是一种遵循 后进先出(LIFO, Last In First Out)原则的数据结构。也就是说,最后被放入栈中的元素会最先被取出。 push():将一个或多个元素添加到数组的末尾,返回新数组的长度。 pop():移除数组的最后一个元素,并返回该元素。 peek()(自定义方法): 阅读全文
posted @ 2025-03-09 23:00 我是格鲁特 阅读(28) 评论(0) 推荐(0)
摘要:数组中找到两个数,它们的和等于给定的目标值 判断一个字符串是否是回文字符串 二分查找法(变种的:数组峰值) 快速排序算法 动态规划: 爬楼梯 最小子序列和 栈的应用: 括号匹配 常数时间内找出栈中的最小元素 随机数相关: js抽奖算法 js生成指定范围的随机数 深拷贝函数的实现 双指针边界总结 阅读全文
posted @ 2025-03-09 22:51 我是格鲁特 阅读(43) 评论(0) 推荐(0)
摘要:在一个给定的数字数组中找到两个数,它们的和等于给定的目标值。可以通过多种方法来解决这个问题,以下是两种常见且高效的解决方案。 方法 1:使用哈希表 (Set 或 Map) 通过哈希表来存储已经遍历过的数字,利用哈希表的快速查找特性来实现。在遍历数组的同时,检查当前数字与目标值的差值是否已经存在于哈希 阅读全文
posted @ 2025-03-09 22:46 我是格鲁特 阅读(61) 评论(0) 推荐(0)
摘要:回文字符串是指正着读和反着读都相同的字符串。比如 "racecar" 或 "level"。 方法 1:使用双指针法 通过使用两个指针,一个指向字符串的开始,另一个指向字符串的结束,逐个比较字符。 function isPalindrome(str) { let left = 0; let right 阅读全文
posted @ 2025-03-09 22:39 我是格鲁特 阅读(56) 评论(0) 推荐(0)
摘要:一、常用排序算法 快速排序 插入排序 归并排序 二、使用场景 排序算法适用场景时间复杂度(平均)时间复杂度(最坏)空间复杂度是否稳定 快速排序(Quick Sort) 大规模数据、随机数据、数组排序 O(n log n) O(n²)(选错 Pivot) O(log n)(原地排序) ❌ 不稳定 插入 阅读全文
posted @ 2025-02-21 20:41 我是格鲁特 阅读(11) 评论(0) 推荐(0)
摘要:LRU 缓存算法基于一个基本假设:如果一个数据长时间没有被访问,那么它未来也很可能不会再被访问。因此,当缓存达到上限时,应该淘汰掉最久未被访问的数据。 过期时间:缓存项有一个时间戳(timestamp),每次访问时都会重新设置一个新的过期时间 maxAge,如果缓存项超过 maxAge 设定的过期时 阅读全文
posted @ 2025-02-08 09:53 我是格鲁特 阅读(110) 评论(0) 推荐(0)
摘要:核心思路: 设定概率: 奖项1概率:5% 即 [0 - 0.05) 的范围 奖项2率:10%. 即 [0.05 - 0.1) 的范围。注:为什么是从0.05开始?因为<0.05的话就是中了上一个奖 不中奖. 即 [0.05 - 1) 的范围 要提高中奖难度,可以通过 缩小中奖概率区间 来减少中奖的机 阅读全文
posted @ 2024-12-04 20:46 我是格鲁特 阅读(265) 评论(0) 推荐(0)
摘要:使用JSON.parse(Json.stringify())实现深拷贝有哪些坑? 如果属性值是undefined、或者函数,序列化后属性丢失; 如果属性值是RegExp、Error对象,序列化后值是{}; 如果属性值是NaN、Infinity和-Infinity,则序列化的结果会变成null 因此一 阅读全文
posted @ 2024-11-11 11:48 我是格鲁特 阅读(41) 评论(0) 推荐(0)
摘要:插入排序跟打扑克牌一样,每次抽一张牌,按照从小到大的顺序插入到手里的正确位置,操作过程如下: 你从桌面上拿起第一张牌(已经排序)。 拿起第二张牌,插入到正确的位置。 拿起第三张牌,找到它应该在手中的位置,插入。 依次遍历每张牌,找到合适的位置插入。 速记口诀如下:左边有序,右边待插,拿起一张,插入应 阅读全文
posted @ 2022-04-20 22:44 我是格鲁特 阅读(87) 评论(0) 推荐(0)
摘要:1.矩形相交检测算法 两个矩形相交有如下四种情况: 如果两个矩形,假设为o1和o2,若两者相交,那么矩形o1、o2的中心点与矩形的边长是有一定关系的,如下图: if(Math.abs(x0 - x1) <= o1.width/2 + o2.width /2 && Math.abs(y0- y1) < 阅读全文
posted @ 2022-04-20 13:47 我是格鲁特 阅读(117) 评论(0) 推荐(0)
摘要:归并排序的时间复杂度是 O(n log n),不论是最坏、最好还是平均情况,因此它是一个非常高效的排序算法。 归并排序的空间复杂度是 O(n),因为它需要额外的空间来存储合并过程中的临时数组。 示意图 实现 先拆分(Divide):不断将数组拆成左右两半,直到每个子数组只剩一个元素。 1. 递归法( 阅读全文
posted @ 2022-04-20 09:51 我是格鲁特 阅读(68) 评论(0) 推荐(0)