越哥聊AI
互联网技术专家,阿里云MVP,任职淘宝、美团,著有《分布式技术原理与实战》,拉勾网、InfoQ讲师、人人都是产品经理专栏作者,分享互联网架构,关注认知升级
展开
-
Leetcode 399: 除法求值
给定一些字符串变量对以及它们之间的比例关系equations和values,其中 ( equations[i] = [A_i, B_i] ) 表示 ( A_i \div B_i = values[i] )。同时给定一些查询queries,每个查询是一个字符串对 ([X, Y]),要求计算结果 ( X \div Y )。如果根据已知数据无法计算结果,返回 -1.0。基于已知比例关系和查询,返回所有查询的计算结果。values[i]将变量和关系建模为使用keyvalue每个查询通过。原创 2025-03-09 13:01:41 · 537 阅读 · 0 评论 -
LeetCode 90: 子集 II
如果 LeetCode 78 的(LeetCode 90: 子集 II),问题的核心在于如何处理重复元素,使得生成的子集不会出现重复。要做到这一点,我们需要利用和,避免重复子集的生成。给定一个可能包含重复元素的整数数组nums,要求返回所有可能的不重复子集。对于包含重复元素的数组,回溯过程可能会生成重复的子集。通过上述策略,在构造子集的过程中动规地其递归搜索空间。以下是nums[i]原创 2025-03-09 11:21:48 · 516 阅读 · 0 评论 -
Leetcode 78: 子集
给定一个整数数组nums,其中元素,返回其所有可能的子集(幂集)。回溯是一种非常适合解决子集枚举问题的方法。它通过递归逐步生成每一个子集,并在每一步中进行选择和撤销。以下是回溯法的标准实现,对于任意数组nums,可以生成其所有子集。原创 2025-03-09 11:19:14 · 399 阅读 · 0 评论 -
LeetCode 31 - 下一个排列
是一个经典题,考察对排列的基本操作,包括逆序、排序以及贪心思想。该题目常会出现在竞赛、面试中,变体场景也非常多,例如字典序排列的生成、排列搜索问题等。以下是详细解法、分析以及变体分类。实现获取下一个排列的算法,该排列是字典序中比当前排列大的下一个排列。原创 2025-03-09 10:58:26 · 328 阅读 · 0 评论 -
Leetcode 22: 括号生成
适合面试的解法:回溯法使用递归与回溯构造括号组合,逻辑清晰,适合快速实现和表达。时间复杂度为 (O(\frac{4^n}{\sqrt{n}})),符合有效解法的要求。展现对递归回溯的理解;突出动态约束(左括号和右括号的合法性判定);提及边界情况处理和剪枝优化。通过此解法,可以快速 AC 并展示对递归和回溯思想的全面掌握,给面试官留下深刻印象!原创 2025-03-09 10:57:24 · 421 阅读 · 0 评论 -
Leetcode 2850: 将石头分散到网格图的最少移动次数
熟练掌握 DFS 和 BFS,是应对此题的必备技能!,要求将石头分散到网格的每个单元格中,同时最小化。等技术来找到最优的分配方案。原创 2025-03-09 10:55:51 · 228 阅读 · 0 评论 -
LeetCode 1997 - 访问完所有房间的第一天
这道题属于图论问题,结合了多源 BFS、最短路径问题以及动态规划的思想。问题核心在于如何建模图中房间的访问时间并找到所有房间。问题要求返回:所有房间被访问的最小时间(换句话说,找到其中最晚被访问的房间需要花费的最小时间)。由于这道题较新,常规题解与其变体涉及多种图算法,以下是详细解法分析及模板。通过针对这些思想的练习,可以快速应对图扩展以及最短路径相关的题目!原创 2025-03-09 10:54:56 · 624 阅读 · 0 评论 -
Leetcode 433: 最小基因变化
给定一个起始基因字符串start, 一个目标基因字符串end, 和一个基因库bank,找出从start到end的最少基因变化次数。-1bankbank此解法简单且高效,非常适合面试场景。原创 2025-03-09 10:53:56 · 469 阅读 · 0 评论 -
LRU扩展LRU-K、2Q算法实现分析
LRU算法有一个缺点,就是如果该热点页面在偶然一个时间节点被其他大量仅访问了一次的页面所取代,造成缓存污染原创 2023-04-21 17:49:53 · 1283 阅读 · 0 评论 -
一致性 Hash 算法 及Java 实现
1、一致性 Hash 算法原理一致性 Hash 算法通过构建环状的 Hash 空间替线性 Hash 空间的方法解决了这个问题,整个 Hash 空间被构建成一个首位相接的环。其具体的构造过程为:先构造一个长度为 2^32 的一致性 Hash 环计算每个缓存服务器的 Hash 值,并记录,这就是它们在 Hash 环上的位置对于每个图片,先根据 key 的 hashcode 得到它在 H...原创 2023-04-22 21:57:00 · 154 阅读 · 0 评论 -
一致性 Hash 算法 及Java TreeMap 实现
Redis Cluster 通过分片的方式将整个缓存划分为 16384 个槽,每个缓存节点就相当于 Hash 换上的一个节点,接入集群时,所有实例都将均匀占有这些哈希槽,当需要查询一个 Key 是,首先根据 Key 的 hashcode 对 16384 取余来得到 Key 属于哪个槽,并映射到缓存实例上。当缓存服务器需要扩容的时候,只需要将新加入缓存服务器的 Hash 值放入一致性 Hash 环中,由于 Key 是顺时针查找距离其最近的节点,因此新加入的几点只影响整个环中的一小段。原创 2023-04-22 21:58:19 · 977 阅读 · 0 评论 -
LeetCode 148:排序链表 (Sort Linked List)
优先熟练掌握递归归并排序,作为 LeetCode AC 的首选。迭代归并排序在强调空间复杂度下非常重要。拓展常见链表排序变形,熟悉归并/快排的变体问题应对跨题目场景!原创 2025-03-02 17:18:17 · 1370 阅读 · 0 评论 -
LeetCode 124:二叉树中的最大路径和
给定一个,返回其最大路径和。路径被定义为一条从树中任意节点出发,到达任意节点的一条序列。路径至少包含一个节点,且不需要经过根节点。最终,我们需要选出全局最大路径和(单边路径和 + 跨越路径和)。在后序遍历的过程中,自底向上计算每个节点的和。原创 2025-03-02 10:06:58 · 535 阅读 · 0 评论 -
LeetCode 199 二叉树的右视图
在解决 LeetCode 199 二叉树的右视图(Binary Tree Right Side View)问题时,我们需要找到从二叉树右侧看见的节点值(即每一层中最靠右的节点值)。以下是多种解法、对应模板及变体问题的讨论。原创 2025-03-02 10:08:09 · 909 阅读 · 0 评论 -
Leetcode 909: 蛇梯棋(Snakes and Ladders)
广度优先搜索是解决最短路径问题的核心方法,非常适合用于类似 BFS 树层次遍历的蛇梯棋。通过 BFS 解法,你可以快速实现蛇梯棋问题的高效解答,是面试中最佳的选择!给定一个 ( n \times n ) 大小的蛇梯棋游戏板。解释:从起点到终点的最短步数为 4。解释:从起点到终点,只需要一步。原创 2025-03-09 10:43:42 · 265 阅读 · 0 评论 -
Leetcode 55: 跳跃游戏
给定一个非负整数数组nums,其中nums[i]表示从下标i位置最多可以跳跃的最大步数。判断是否可以从数组的第一个位置跳跃到最后一个位置。原创 2025-03-08 18:58:59 · 607 阅读 · 0 评论 -
Leetcode 62: 不同路径
一个机器人位于一个 (m \times n) 网格的左上角(起始点位于 ((0, 0)))。机器人每次只能向下或向右移动一步。网格的右下角为终点(位于 ((m-1, n-1)))。计算机器人从左上角到右下角的不同路径总数。动态规划(DP)是一种经典的方法,非常适合解决路径问题。通过定义状态和状态转移方程,我们可以高效地求解从起点到终点的路径数。原创 2025-03-08 18:50:50 · 422 阅读 · 0 评论 -
回文子序列问题解题模板
通过动态规划模板可以快速实现并解决回文相关问题,适配多种场景,非常适合面试。,返回将其转化为回文字符串的最少插入次数。,寻找其中最长的回文子序列的长度。,计算该字符串中有多少个。原创 2025-03-08 18:44:07 · 207 阅读 · 0 评论 -
Leetcode 188: 买卖股票的最佳时机 IV
给定一个整数k,表示最多可以进行的交易次数,以及一个整数数组prices,其中第prices[i]表示第i天的股票价格。设计一个算法来计算可以获得的最大利润。你不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)。动态规划是解决股票买卖问题的最优解法,特别适合这种限制交易次数的问题。它通过状态定义和转移方程处理复杂的交易规则。k。原创 2025-03-08 18:26:09 · 332 阅读 · 0 评论 -
LeetCode 1997 - 访问完所有房间的第一天
这道题属于图论问题,结合了多源 BFS、最短路径问题以及动态规划的思想。问题核心在于如何建模图中房间的访问时间并找到所有房间。问题要求返回:所有房间被访问的最小时间(换句话说,找到其中最晚被访问的房间需要花费的最小时间)。由于这道题较新,常规题解与其变体涉及多种图算法,以下是详细解法分析及模板。通过针对这些思想的练习,可以快速应对图扩展以及最短路径相关的题目!原创 2025-03-07 14:45:57 · 584 阅读 · 0 评论 -
Leetcode 127: 单词接龙
给定两个单词beginWord和endWord,以及一个单词列表wordList,找到从beginWord到endWord的最短转换序列长度。wordList如果不存在这样的转换序列,则返回0。原创 2025-03-07 14:44:51 · 680 阅读 · 0 评论 -
Leetcode 57: 插入区间
给定一个intervals(按开始时间升序排列)和一个新的区间,将新的区间插入到区间集合中并合并重叠的部分,最后返回结果区间集合。原创 2025-03-05 23:48:31 · 706 阅读 · 0 评论 -
Leetcode 112: 路径总和
使用递归实现,树的递归逻辑清晰。判断叶子节点时,特别强调路径和条件。时间复杂度和空间复杂度分析简洁明了,边界处理完整。通过递归方法,你可以快速实现并解决问题,同时展示对二叉树递归的掌握,非常适合面试场景!原创 2025-03-05 23:01:45 · 622 阅读 · 0 评论 -
Leetcode 103: 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历(即第一层从左到右,第二层从右到左,第三层从左到右,依此类推)。这种高效解法逻辑清晰,非常适合面试场景!原创 2025-03-05 22:50:56 · 689 阅读 · 0 评论 -
Leetcode 530: 二叉搜索树的最小绝对差
给定一个二叉搜索树(BST),找到两个节点之间的最小绝对差。原创 2025-03-05 22:50:08 · 304 阅读 · 0 评论 -
Leetcode 37: 解数独
是经典的回溯算法问题,考察如何利用递归和剪枝高效求解数独问题。这题主要考察对回溯、递归、深度优先搜索 (DFS)、剪枝优化等算法思想的掌握。在基础回溯解法的基础上,添加剪枝优化,通过记录数字的使用情况,避免重复判断,加快搜索速度。:经典回溯 + 剪枝思想可以轻松快速地应对数独问题,并在面试中充分展示对搜索问题的理解!给定一个部分填充的数独(9 x 9)网格,用一个有效的算法将其完整解出。剪枝进一步优化,用整数的位运算代替布尔数组进行数字记录。原创 2025-03-05 13:22:03 · 291 阅读 · 0 评论 -
LeetCode 200 - 岛屿数量
是一道经典的图论问题,可应用于网格遍历、连通性判定以及搜索算法(DFS、BFS、并查集等)的全面考察。该问题广泛用于考察深度优先搜索(DFS)、广度优先搜索(BFS)以及并查集等基础技能。以下是详细解析几种解法、模板代码,以及设计的相关变体及其快速解决方法。,计算可能构成的最大岛屿面积。计算完全由水包围的岛屿数量。给定一个网格,尝试将一个。(水域)组成的二维网格。计算岛屿中最大的面积。原创 2025-03-05 13:21:22 · 305 阅读 · 0 评论 -
Leetcode 54: 螺旋矩阵
是一道经典的矩阵遍历模拟题目,要求我们以螺旋顺序遍历一个二维数组。这个问题在面试中非常经典,考察模拟、数组操作以及逻辑清晰度。掌握本题的高效解法可以迅速给面试官留下好印象。该解法直接按照螺旋的变化顺序(右 -> 下 -> 左 -> 上)模拟移动,通过控制方向实现遍历。通过掌握这两种解法,能够灵活应对问题,并快速在面试中实现清晰的解答,获得面试官肯定!原创 2025-03-03 23:09:06 · 674 阅读 · 0 评论 -
Leetcode 49: 字母异位词分组
这是一道经典的哈希表与字符串操作相关的题目,考察快速分组和使用数据结构的能力。所谓字母异位词,是指由相同的字母通过重新排列形成的不同单词。题目要求将一组字符串按照字母异位词分组。,将词组按照字母异位词进行分组,返回所有分组后的结果。字母异位词具有相同的字符,只是排列顺序不同。熟练掌握解法 1 和解法 2,可以在面试中快速 AC 并展现对字符串操作和哈希表应用的理解能力!原创 2025-03-03 23:00:10 · 885 阅读 · 0 评论 -
Leetcode 37: 解数独
是经典的回溯算法问题,考察如何利用递归和剪枝高效求解数独问题。这题主要考察对回溯、递归、深度优先搜索 (DFS)、剪枝优化等算法思想的掌握。在基础回溯解法的基础上,添加剪枝优化,通过记录数字的使用情况,避免重复判断,加快搜索速度。:经典回溯 + 剪枝思想可以轻松快速地应对数独问题,并在面试中充分展示对搜索问题的理解!给定一个部分填充的数独(9 x 9)网格,用一个有效的算法将其完整解出。剪枝进一步优化,用整数的位运算代替布尔数组进行数字记录。原创 2025-03-03 22:42:26 · 500 阅读 · 0 评论 -
Leetcode 30. 串联所有单词的子串
是一道经典的字符串滑动窗口问题。这题考察字符串切分、哈希表匹配以及滑动窗口的灵活应用。解题难度较高,需要对循环和判断逻辑有良好的掌握。给定一个字符串s和一组长度都相同的单词数组words,找出s中恰好可以由数组中的连续子字符串的起始索引。这些单词在子字符串中可以以任意顺序排列,但每个单词必须完全匹配。原创 2025-03-03 22:32:10 · 368 阅读 · 0 评论 -
Leetcode 538: 把二叉搜索树转换为累加树
将给定的二叉搜索树 (BST) 转化成累加树 (Greater Tree),使得每个节点的值是原树中所有大于或等于该节点值的节点值的和。是一道经典的树问题,考察的是二叉树的遍历、递归思想以及对二叉搜索树 (BST) 特性的理解。熟练掌握这三种解法,能应对几乎所有类似问题!原创 2025-03-03 22:28:32 · 584 阅读 · 0 评论 -
Leetcode 316 去除重复字母
又不包含重复字符,而且在原字符串中字符的相对顺序要保持不变。下面列举几种解法,并分析其实现方式和时间复杂度。是一道考察贪心思想与栈在字符串操作中使用的经典题目。该题的目标是让结果字符串既是。无论比赛还是面试,熟练掌握单调栈模板均可快速 AC!,其中包含小写字母。原创 2025-03-03 20:37:18 · 706 阅读 · 0 评论 -
Leetcode 215 数组中的第K个最大元素
是一道非常经典的数组排序与查找问题,也是面试中非常常见的问题。考察重点包括:排序、堆排序、快速选择等多种方法,其中需要快速定位第K个最大元素。快速选择是快速排序的变种,只关注目标元素所在的部分,不需要对整个数组完全排序。个元素的小顶堆,其中堆顶元素始终为当前堆中最小的元素。根据场景选择合适解法,可以快速 AC 本题!遍历完成后,堆顶元素就是第。原创 2025-03-03 20:36:18 · 906 阅读 · 0 评论 -
Leetcode 721 账户合并
是一题典型的数据结构问题,考察图论、并查集以及深度优先搜索 (DFS) 的应用。题目要求对用户账户中重复的邮箱地址进行合并,合并后的结果按字典序排序。它强调。:一个列表accountsaccountskBFS 的核心思想与 DFS 类似,同样通过邮箱图的连通分量划分邮箱集合。唯一不同的是,它使用队列而不是递归栈来进行邻居的探索。原创 2025-03-03 20:31:45 · 811 阅读 · 0 评论 -
Leetcode 209 长度最小的子数组
是一道经典的滑动窗口问题,考察多种算法思想,包括双指针、前缀和、二分查找等解法。本题要求找到数组中和大于等于。无论是面试还是竞赛,熟练掌握滑动窗口模板,就可以快速 AC 本题!且长度最短的连续子数组的长度。如果不存在这样的子数组,返回。:返回其长度最小的子数组,即和大于等于。的最短连续子数组长度。原创 2025-03-03 20:26:30 · 334 阅读 · 0 评论 -
Leetcode 206 -反转链表
这是一道非常经典的链表操作题目,要求熟练掌握链表的遍历与指针操作。反转链表是面试中经常出现的题目之一,也是链表题目的基本方法题。熟练掌握以上解法,可以确保在任何场景中快速 AC 本题!递归返回后,新头节点会逐层归还至上层调用。原创 2025-03-03 20:16:27 · 979 阅读 · 0 评论 -
Leetcode 662: 二叉树最大宽度
是一道考察树的层序遍历和位编号思想的经典题目。通过以上解法分析与模板准备,可以快速完成这道题并 AC!相比解法 1 的队列实现,这里省略使用。来记录编号数,直接在每层中计算。原创 2025-03-03 20:08:17 · 411 阅读 · 0 评论 -
Leetcode 189: 轮转数组
优先选择三步翻转解法:O(n) 时间复杂度,O(1) 空间复杂度,实现简单,效率最高,是面试中优先推荐的解法。针对特殊场景如果原数组不可修改,可以选择额外数组解法。如果需要一定技巧性(如比特运算分析竞赛题),环状替换法更具逻辑挑战。边界情况注意kk %= n。空数组或k=0时,直接返回。通过掌握以上 3 种高效解法(特别是三步翻转技巧),不仅可以轻松解决问题,还能给面试官留下深刻印象。原创 2025-03-03 20:06:36 · 730 阅读 · 0 评论 -
LeetCode 25 - K 个一组翻转链表
这道题是一个典型的链表操作题,考察我们对链表的精确操作,包括反转链表、分组处理、递归和迭代的结合应用等。还可以通过变体问题延伸到优先队列操作、归并、分块等,这使得它成为面试中的高频考题之一。通过对链表反转操作的熟悉,配合经典模板化实现,可以快速应对链表转化类问题,并高效解决工程中复杂数据结构操作场景。个节点一组进行翻转,并返回翻转后的链表。(链表长度 / k)原创 2025-03-03 18:16:28 · 898 阅读 · 0 评论