- 博客(1947)
- 收藏
- 关注
原创 2039. 网络空闲的时刻
消息往返时间为秒。如果往返时间小于等于重发周期,说明服务器只发送一次消息,回复时间即为。否则服务器会重发多次,重发的时间点为0, …,直到收到回复。最后一次重发消息的发送时间last_send可以通过公式计算:这里的是为了向下取整最后一次重发时间。最后回复时间为。这道题通过 BFS 计算无权图的最短路径,再结合周期性重发策略,巧妙地用数学公式计算出每个服务器最后的回复时间,最后取最大值确定网络空闲时间。题目考察了图的遍历算法、路径计算和周期性事件模拟的结合,非常经典且实用。
2025-07-25 20:03:10
458
原创 2038. 如果相邻两个颜色均相同则删除当前颜色
这道题通过对字符串连续同色段的长度统计,巧妙简化了博弈过程,将复杂的轮流删除操作转化成对双方删除次数的比较。这种思路适用于类似“只能在连续相同元素中间操作”的问题,避免了复杂的状态模拟,极大提升了效率。你也可以尝试写代码模拟整场游戏验证这个结论,但会更复杂且效率低。
2025-07-25 20:02:23
655
原创 2034. 股票价格波动
这道题考察了数据结构设计与更新机制,重点在于如何处理“旧数据失效”问题,利用惰性删除实现高效维护最大/最小值,同时通过哈希表快速更新同时间戳的价格。代码简洁、性能优秀,适合面试和实际系统的设计需求。
2025-07-24 07:15:09
428
原创 2033. 获取单值网格的最小操作数
展平二维网格为一维列表。判断是否所有数之间差值是 x 的倍数。将所有数“归一化”成以一个参考数(如第一个元素)为基准的操作步数。排序,选中中位数为目标操作步数,以最小化操作总和。计算所有数变成目标所需的总操作次数。这道题结合了数学推理与贪心策略通过差值模x判断是否有解;通过排序与中位数选择,最小化操作次数;时间与空间复杂度都在可控范围内,适合在面试或竞赛中使用。
2025-07-24 07:14:12
252
原创 2029. 石子游戏 IX
将问题转化为模3意义下的博弈模型理解 mod0 的“奇偶性”对全局策略的影响记住 Bob 会在所有石子移除后直接获胜这一特殊规则最终代码极度精炼,却隐藏了深刻的博弈策略和数学逻辑,是一道非常经典的博弈+数学分类讨论题目。
2025-07-23 22:41:38
600
原创 2028. 找出缺失的观测数据
算法简单高效:利用数学关系确定缺失和范围,贪心分配点数。适合大规模数据:仅线性遍历,内存使用低。若无解及时返回,避免无意义计算。多解问题:只需返回任意一组解,降低复杂度。这道题目既考察了数学推导能力,也考察了贪心算法的设计,非常适合用来训练面试中的思路表达和代码实现能力。
2025-07-23 22:40:53
978
原创 2024. 考试的最大困扰度
本题的核心是利用滑动窗口维护满足修改次数限制的最长连续子串。通过分别计算以'T'和'F'为目标的最长连续子串,取最大值即可。这种双向滑动窗口技巧,是处理「最多 k 次修改/翻转,求最大连续相同字符」类问题的经典方法。
2025-07-22 09:17:07
985
原创 2023. 连接后等于目标字符串的字符串对
本题通过双重循环暴力枚举(i, j),判断拼接是否等于target,统计满足条件的对数。代码简单,效率在题目限制下足够。适合作为字符串拼接问题的入门练习。
2025-07-22 09:16:21
386
原创 2018. 判断单词是否能放入填字游戏内
你需要实现一个函数,判断给定的单词word是否可以被放入一个填字游戏棋盘board中。棋盘是一个m x n' ''#''#'' ''#'
2025-07-21 16:56:47
339
原创 2017. 网格游戏
这道题虽然看似是路径收集问题,实质是一个零和博弈问题。第一个机器人控制路径影响第二个;第二个机器人总是在剩余点数最多路径中选择。通过枚举策略 + 前缀和加速判断,可以轻松解决这道题,并深入理解“在约束下的最优选择博弈模型。
2025-07-21 16:56:02
1037
原创 2013. 检测正方形
本题属于典型的几何枚举 + 哈希表计数问题,通过构造候选点 + 判断其是否存在于数据结构中,可以高效地统计所有满足条件的正方形组合。你可以根据应用场景选择更适合的优化版本。通过本题可以锻炼你对几何构造、哈希存储、查询优化等综合能力。
2025-07-20 17:32:17
314
原创 2012. 数组美丽值求和
类似于“前缀最大值”“后缀最小值”这种技巧在很多问题中都非常常用,比如“下一个更大元素”、“最大子数组”等。本题的本质是利用这些前缀/后缀信息,避免了不必要的暴力枚举,达到了线性优化效果。
2025-07-20 17:31:37
723
原创 2008. 出租车的最大盈利
定义数组dpdp[i]表示以第i个订单作为最后一个接的订单时,能获得的最大收益。该题核心是求最大权重不相交区间子集,经典算法是先排序后动态规划,利用二分优化。也可以用线性扫描+优先队列,但复杂度和代码复杂度通常更高。通过合理的状态设计和二分查找,能在线性对数时间内完成。
2025-07-19 18:18:14
551
原创 2007. 从双倍数组中还原原数组
这道题通过计数和排序来匹配元素及其双倍,是典型的哈希表应用。合理处理特殊元素和边界条件,是确保算法正确的关键。掌握这类问题对理解数组配对、频率统计和排序有重要帮助。
2025-07-19 18:17:13
1016
原创 2002. 两个回文子序列长度的最大乘积
子序列是从字符串中删除若干字符(也可以不删除)后,剩余字符的相对顺序不变的字符串。本题是回文子序列与位掩码的结合。枚举所有子序列并判断回文,是利用小规模输入限制的典型暴力解法。使用位掩码保证子序列索引的快速判断和不相交验证。适合用来熟悉回文、子序列和位运算技巧的组合。
2025-07-18 00:05:51
421
原创 2001. 可互换矩形的组数
这道题的关键点在于如何准确比较两个矩形的宽高比。直接浮点数比较容易出错且效率较低。通过化简宽高比为最简分数并利用哈希统计出现次数,可以高效解决问题。该题属于经典的哈希计数问题,技巧在于如何规范地表示宽高比。掌握了分数化简技巧,可以应对类似比例问题的判断与计数。
2025-07-18 00:05:07
904
原创 1997. 访问完所有房间的第一天
本题巧妙地利用动态规划,将复杂的跳转模拟简化成递推公式,避免了大规模的时间模拟。关键在于理解访问次数的奇偶性如何影响访问顺序。利用前面访问的结果dp计算后续房间访问天数。时间和空间复杂度均为 O(n),适合 n 达到 10^5 的场景。
2025-07-17 23:46:37
858
原创 1996. 游戏中弱角色的数量
这道题考查了二维排序与贪心的结合应用。关键在于排序策略,防止攻击值相同的角色造成误判。逆序遍历维护最大防御值,能够在一次遍历中判断角色是否弱。这类「二维条件筛选」的问题,类似于“skyline问题”或“包裹问题”,可以借鉴排序+扫描的思路。
2025-07-17 23:45:51
369
原创 1993. 树上的操作
设计一个支持上述三种操作的数据结构。对树结构的父节点数组进行初始化。调用lockunlockupgrade函数时需高效地满足条件判断。节点锁定状态和用户信息需要准确维护。操作次数和节点数均有限制,考虑时间复杂度。这道题考察了树结构上的状态维护与递归遍历能力,涉及祖先和子孙节点的条件判断。通过维护父节点和子节点列表,能方便地查询祖先和子孙。递归深度受限于树高,DFS在题目范围内效率足够。可用类似的方法扩展至更复杂的树状结构状态管理。
2025-07-12 13:56:16
342
原创 1992. 找到所有的农场组
利用题目中“农场为矩形且不相邻”的特点,大大简化了问题,遍历时遇到1直接定位矩形边界,标记后避免重复,该方法简单易实现,时间空间效率都很好。
2025-07-12 13:55:37
245
原创 1986. 完成任务的最少工作时间段
函数dfs(mask)表示完成mask这组任务(用1标记)的最少时间段数。mask == 0表示任务全部完成,返回 0。本题核心是任务划分的子集组合优化问题,利用状态压缩和子集枚举的经典技巧实现最优解。该方法虽然复杂度指数级,但通过合理的剪枝和记忆化缓存,在 14 个任务以内表现良好。此题是理解位运算枚举子集、状态压缩 DP 和记忆化递归的典型练习,适合刷题和算法学习。
2025-07-10 10:35:25
1141
原创 1985. 找出数组中的第 K 大整数
方法优点缺点转整数比较简单直观数据大时会溢出自定义比较适用所有长度数字,灵活代码稍复杂,需保证比较正确预处理排序利用内置排序快速,代码简洁依赖排序稳定和正确的 key本题最优方案是利用 Python 的排序稳定性和灵活的排序键,实现基于长度和字典序的排序,保证高效准确。本题的关键是正确比较字符串表示的大整数。通过先比较长度,再字典序比较,能够实现数字大小排序。利用内置排序和合适的排序键,可以轻松得到第 k 大数字。此方法不仅高效,而且代码简洁,适合面试和实际编程使用。
2025-07-10 10:34:43
438
原创 1981. 最小化目标值与所选元素的差
暴力搜索难以接受,时间复杂度爆炸。动态规划通过保存每步的可能和,有效避免了重复计算。剪枝确保状态集合不过度膨胀,提升性能。对比其他方法如DFS+剪枝,这种DP思路更容易理解和实现,也更稳定。利用位运算优化状态表示(位集)。使用布尔数组替代集合,快速判断和状态。在Python中适当用heap或优先队列优化查找最小差。
2025-07-08 00:15:00
305
原创 1980. 找出不同的二进制字符串
这道题的精妙之处在于它是构造题而不是查找题。使用康托尔对角线法,可以快速构造一个保证不在原数组中的字符串;这种方法是数学构造中的经典技巧,也是很多面试官考察的重点;理解这个技巧,对提升构造思维能力大有裨益。
2025-07-08 00:00:00
406
原创 1976. 到达目的地的方案数
这道题是 Dijkstra 算法的一个拓展版本,除了求出最短路径长度,还需要统计路径数目。这种题型在图论竞赛和工程中都很常见,比如地图导航、数据包传输路径计数等。
2025-07-07 00:45:00
551
原创 1969. 数组元素的最小非零乘积
这道题是一道非常典型的数学构造 + 位操作建模问题抽象交换操作的意义;利用二进制位的对称性和全局可控性;构造数学表达式,结合快速幂求解。不仅锻炼了对位运算和数论的理解,也要求具备较强的建模能力。
2025-07-07 00:30:00
1240
原创 1968. 构造元素不等于两相邻元素平均值的数组
该问题可以通过对数组排序后分成两半,再交错排列的策略轻松解决。这种排列避免了中间元素成为邻居元素平均值的情况。代码实现简洁且高效,适用于大规模数组。
2025-07-07 00:15:00
1843
原创 1963. 使字符串平衡的最小交换次数
通过统计括号的平衡度balance,找出字符串中最大的不平衡负值;根据最大不平衡值计算最少的交换次数;交换次数公式为,有效地修复了字符串中的错误顺序;算法时间复杂度为 O(n),空间复杂度为 O(1),适合大规模数据。
2025-07-07 00:00:00
728
原创 1962. 移除石子使总数最小
方法是否正确使用的数据结构时间复杂度说明错误版本❌最大堆(误放值)O(k log n)错误在于放回了移除量正确版本✅最大堆(放回剩余)O(k log n)每次从最大堆取最大堆执行移除操作。
2025-07-06 00:15:00
451
原创 1959. K 次调整数组大小浪费的最小总空间
这道题结合了「动态规划」、「分段最优化」、「前缀和」与「区间最大值预处理」等多个算法思想,是一道很适合锻炼 DP 思维的题目。
2025-07-06 00:00:00
515
原创 1958. 检查操作是否合法
本题考察了二维棋盘上的方向遍历与颜色连续性判断。纯逻辑8方向判断方案不修改棋盘,更安全,易于理解。通过检查涂色点在各方向的邻接格颜色组合,判定是否形成满足条件的“好线段”。算法时间复杂度为常数(固定8x8棋盘及8方向),效率足够。
2025-07-05 00:15:00
456
原创 1954. 收集足够苹果的最小花园周长
若x >= 0,则|x| = x若x < 0,则|x| = -x本题巧妙利用了对称性和数学公式,将问题从遍历无限点的暴力计算,转化为数学表达式计算。利用单调性应用二分查找,快速找到满足条件的最小边长n。代码简洁高效,满足大数据量的需求。
2025-07-05 00:00:00
657
原创 1953. 你可以工作的最大周数
这道题通过简单的数学推导和贪心思路,巧妙地解决了「不能连续两周做同一个项目」的限制。它归结为判断最大任务项目与其他任务项目的任务数量关系,从而推断最大可工作的周数。掌握这类问题的思路,可以帮助你应对更多涉及任务调度和交替执行的限制类题目。
2025-07-04 00:15:00
316
原创 1947. 最大兼容性评分和
暴力全排列的时间复杂度为 O(m!),当 m 较大时不可行。状态压缩 + 记忆化搜索能在保证正确性的同时,有效剪枝和复用状态,适合 m 不太大的场景。如果 m 很大,还可以考虑匈牙利算法或KM算法来做最大权匹配,但实现更复杂。正确计算每对的兼容性评分构建合理的搜索策略找到最大匹配使用状态压缩和记忆化避免指数爆炸这也是匹配类问题中很典型的解法思路,掌握了这一套路,对类似题目大有裨益。
2025-07-04 00:00:00
556
原创 1946. 子字符串突变后可能得到的最大整数
从左到右遍历字符串。找到第一个使映射数字原数字的位置,开始替换。替换过程中,只要映射数字>=原数字就继续替换。遇到映射数字原数字时停止替换。替换结束后返回结果。本题考察贪心思想在字符串操作中的应用。关键在于合理定位开始和结束替换的时机,从左向右遍历字符串,同时保证替换的连续性和最大化结果。通过映射数组change和贪心策略,不断尝试替换,直到出现使结果变小的数字时停止,最终得到最大可能的数字字符串。
2025-07-03 10:01:18
708
原创 1943. 描述绘画结果
本题通过扫描线算法解决,核心是将线段开始和结束作为事件点,动态维护当前颜色集合的和,输出颜色不变的区间。实现简单,逻辑清晰,是处理区间重叠、颜色混合类问题的经典范式。
2025-07-03 10:00:31
810
原创 1942. 最小未被占据椅子的编号
通过时间排序和模拟来保证事件顺序正确。通过两个堆动态维护椅子的分配和释放。利用最小堆保证分配的椅子编号始终是最小可用的。掌握这类问题的处理技巧,对类似资源调度、区间分配等题目大有裨益。
2025-07-03 00:15:00
1545
原创 1937. 扣分后的最大得分
设dp[r][c]表示:在第r行选择第c列时,所能获得的最大得分。(对所有 k ∈ [0, n-1])这是一种从上一行所有位置k转移到当前列c的过程,惩罚是距离差abs(c - k)。这道题巧妙地结合了动态规划和前缀最大值的技巧,避开了朴素暴力的效率瓶颈,是一道非常经典的“转移代价”动态规划题。分方向维护最大值(如从左到右、右到左)将惩罚函数拆分为线性表达式预处理可复用的最大值原创不易,转载请注明出处 🙏。
2025-07-03 00:00:00
330
原创 1936. 新增的最少台阶数
贪心思想:每次尽量跳到能跳的最远距离;区间分段:将距离diff分成不超过dist的小段;算法技巧:用整数除法//快速计算插入数量,避免循环模拟。这类题目虽然简单,但在面试中非常常见,建议熟练掌握。
2025-07-02 00:15:00
358
原创 1934. 确认率
连接操作(特别是LEFT JOIN)的理解;分组与条件聚合的掌握;空值处理与容错设计的能力;SQL 数学表达能力(如除法、保留小数等)的掌握。这种模式在业务数据分析中极为常见,如计算用户转化率、活动完成率等,非常值得掌握。
2025-07-02 00:00:00
934
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人