随笔分类 - 每日一题(优题记录)
摘要:题目链接:332. 重新安排行程 - 力扣(LeetCode) 解析 这道题的核心是有向图的欧拉路径问题,可以使用Hierholzer算法解决: 关键点分析 欧拉路径定义:在图中经过每条边恰好一次的路径 有向图欧拉路径存在条件: 所有顶点的入度等于出度(欧拉回路) 或者恰好有一个顶点出度比入度大1(
阅读全文
摘要:题目链接:330. 按要求补齐数组 - 力扣(LeetCode) 这是一个经典的贪心算法问题,核心思路是维护一个当前能够覆盖的连续整数区间 [1, cover],通过遍历数组和适时补充数字,最终使 cover达到 n。 算法步骤 初始化 cover = 0(表示能表示 [1, cover]的所有整数
阅读全文
摘要:题目链接:329. 矩阵中的最长递增路径 - 力扣(LeetCode) 将矩阵看成一个有向图,每个单元格对应图中的一个节点,如果相邻的两个单元格的值不相等,则在相邻的两个单元格之间存在一条从较小值指向较大值的有向边。问题转化成在有向图中寻找最长路径。 深度优先搜索是非常直观的方法。从一个单元格开始进
阅读全文
摘要:题目链接:319. 灯泡开关 - 力扣(LeetCode) 解析: 两个概念 1. 绝大多数数的约数都是成对出现的(若 x是约数,则 k/x也是),因此约数个数通常是偶数。完全平方数。包含一个自伴的约数(平方根 √k,使得 x = k/x),这个单独的约数打破了“成对”的对称性,从而导致约数总个数为
阅读全文
摘要:题目链接:318. 最大单词长度乘积 - 力扣(LeetCode) 解析: 位运算,将字母表示成01的值,然后& class Solution { public: int maxProduct(vector<string>& words) { int n = words.size(); vector
阅读全文
摘要:题目链接1:316. 去除重复字母 - 力扣(LeetCode) 解析: 字典序最小:要让结果字符串的字典序尽可能小,需要让较小的字符尽量靠前。 去重且保持顺序:每个字符只能出现一次,且相对顺序不能打乱。 关键策略:遍历字符串时,如果当前字符比栈顶字符小,并且栈顶字符在后面还会出现,那么就可以弹出栈
阅读全文
摘要:一、核心思想与适用题型 核心思想 区间DP的核心是将问题分解为子区间求解,通过解决子区间的最优解来构建整个区间的最优解。其基本思路是: 定义状态表示区间[i, j]的属性 通过枚举分割点将大区间划分为两个或多个子区间 将子区间的解合并得到大区间的解 适用题型特征 问题涉及区间操作:如合并、分割、删除
阅读全文
摘要:题目链接:313. 超级丑数 - 力扣(LeetCode) 解析: 一个超级丑数肯定是由小于该数的超级丑数 * prime得来,如果不是这样就有别的因数了 针对每个prime维护一个下标,初始指向第一个超级丑数,也就是1,遍历所有prime * 1 取最小值min_v,min_v就是第二个超级丑数
阅读全文
摘要:单点查询、区间修改,树状数组 tree的下标注意从1 到 n + 1,从0开始就死循环了 例题: 307. 区域和检索 - 数组可修改 - 力扣(LeetCode) class NumArray { public: vector<int> c; vector<int> array; int n =
阅读全文
摘要:题目链接:279. 完全平方数 - 力扣(LeetCode) 解析: 简单dp class Solution { public: int numSquares(int n) { vector<int> sq; for (int i = 1; i <= 100; i++) { sq.push_back
阅读全文
摘要:题目链接:273. 整数转换英文表示 - 力扣(LeetCode) 解析: 中文转英文:每三位一组,先用英文表示,然后从第二组开始向后几组分别增加单位 "Thousand", "Million", "Billion" 比如101001 "One Hundred One Thousand One" c
阅读全文
摘要:题目链接:https://leetcode.cn/problems/single-number-iii/description/?source=vscode 解析: 异或最终可以得到两个数的异或值,找到该值为1的位数,(必定有一位为1,因为两个数不同) 然后根据该位将数组里的数分成两组 (相同的数肯
阅读全文
摘要:题目链接:233. 数字 1 的个数 - 力扣(LeetCode) 解析: 这道题我是用排列组合做的,可以看题目注释 // 整体思想: // 1、从左到右,针对第k位数减一后,后边的n - k位子可以0~9排列组合 // 2、先用总的排列组合 - 没有1的排列组合 // 3、这总共n - k + 1
阅读全文
摘要:题目链接:229. 多数元素 II - 力扣(LeetCode) 解析: 这题还是记录一下,哥们的两次lru肯定比题解的摩尔投票好 O(N)、O(1)的方法 找出 大于N/3 向下取整 个数 的数,这样的数最多有2个,大于2个就超过总长度了 维护一个长度为3的list,从前向后,从后向前分别来一次l
阅读全文
摘要:题目链接:223. 矩形面积 - 力扣(LeetCode) 解析: 确实不擅长几何题,用投影求重叠矩形的边长 看官方题解吧 class Solution { public: int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, in
阅读全文
摘要:C++ set 容器基于红黑树实现,其核心操作的时间复杂度如下: 查找、插入、删除操作:平均和最坏情况均为 O(log n),其中 n 是集合中的元素数量。这种对数级性能得益于红黑树的自平衡特性。 遍历操作:时间复杂度为 O(n),需要访问每个元素 需要注意的点: 容器类型限制
阅读全文
摘要:好多年了,竟然没忘,蓝书上的,之后数据结构书又改一了版 void quick_sort(vector<int>& nums, const int& k, int x, int y) { if (x >= y) return; int p = x, q = y; int stash = nums[x]
阅读全文
摘要:题目链接:172. 阶乘后的零 - 力扣(LeetCode) 解析: 方法一:数学n! 尾零的数量即为 n! 中因子 10 的个数,而 10=2×5,因此转换成求 n! 中质因子 2 的个数和质因子 5 的个数的较小值。 由于质因子 5 的个数不会大于质因子 2 的个数,我们可以仅考虑质因子 5 的
阅读全文
摘要:题目链接:164. 最大间距 - 力扣(LeetCode) 解析: 排序后相邻数字最大间距 要 >= ceil((max - min) / (n - 1)) 然后分桶,保持每个桶的max和min即可 class Solution { public: int maximumGap(vector<int
阅读全文
摘要:题目链接:154. 寻找旋转排序数组中的最小值 II - 力扣(LeetCode) 解析: 81. 搜索旋转排序数组 II - 力扣(LeetCode) 感觉代码有点乱,换种方法 当mid与0相等的时候可以考虑,直接过滤0,start++,这样start ~ n的下标区间内还是所有元素都有 但这样会
阅读全文

浙公网安备 33010602011771号