- 博客(1319)
- 收藏
- 关注
原创 贪心|建图dfs
4. 状态枚举与递归:先处理“跳过当前位”的情况(未构成合法数字时),再确定当前位可填数字上限,从有效起始数字(避免前导零)枚举所有未使用过的数字,递归计算下一位结果并累加;if ((mask >> d & 1) == 0) { // d 不在 mask 中,说明之前没有填过 d。// 如果前面填的数字都和 n 的一样,那么这一位至多填数字 s[i](否则就超过 n 啦)// 枚举要填入的数字 d。
2026-01-08 12:54:39
153
原创 预存子序列|数位dp
字符串的得分为 right - left + 1。遍历合并两侧匹配长度,取t未被匹配的最短长度即答案。令 right 为删除字符中的最大下标。前缀数组记录s前i位能匹配t的最长前缀。后缀数组记录s后i位能匹配t的最长后缀。令 left 为删除字符中的最小下标。尽可能长的 连续保留拼接 t左右。前后缀分解+预存最长子序列。
2026-01-08 10:40:21
173
原创 二分猜答案
1. 前提:输入数组是从小到大排序的素数,要找的是“两个素数相除(分子在前、分母在后,分子<分母)”中第k小的那个分数(比如数组[2,3,5],分数有2/3、2/5、3/5,第2小是2/5)- 固定分母 j ,找最大的分子 i 使得 arr[i]/arr[j] ≤ mid (因为数组有序, i 越大,分数越大);- 同时记录这些分数中最大的那个(因为统计数==k时,这个最大分数就是第k小的目标)。二分查找分数值范围,统计小于等于中间值的分数个数,定位第k小的素数分数并返回。
2026-01-07 21:43:58
391
原创 sl|deque实现|缓存命中率
deque底层实现与二分查找接口分块+中控数组在C++容器中, deque (双端队列)的底层设计和二分查找接口的支持性,结合分块思想与二分逻辑,可清晰梳理其设计原理与应用合理性。一、deque的底层实现核心1. 分块存储机制deque 并非连续线性存储,而是采用分块+中控数组的设计:数据被拆分到多个固定大小的内存块中,2. O(1)插入特性在 deque 首尾插入元素时,若对应块未存满,可直接放入实现O(1)时间复杂度;
2026-01-06 10:32:33
334
原创 [AI OS] 重新定义人机交互未来
我们正站在操作系统演进的第三次革命浪潮上。如果说第一次是从命令行到图形界面,第二次是从PC到移动端,那么第三次就是从传统OS到AI OS——一个以大语言模型为内核、以智能代理为应用的全新计算范式。
2025-12-31 17:52:11
1631
原创 子序列贪心|回文
/ 主要是处理"00009"这种情况的。只有左边添加了大于'0'的数字才能在中间添加偶数个'0'// 先将大数字添加到最左边,只用考虑添加偶数个一半的数字"i"// 将数量为奇数的最大一个数字,添加在最中间。// 记录前面对称部分的最后一个下标。// 特判全 0 的情况。// 将右半部分补齐。
2025-12-30 19:58:35
176
原创 vector<int> dfs
j++) { //修改2~7号牢房的状态(牢房号1 ~ 8,对应下标0 ~ 7)//不能整除时返回第 n % (i - 1) 的状态。j++) { //看是否与第一天的状态相同,相同则说明出现了循环。if (i > 1 && flag) { //出现循环,周期为i - 1,直接返回map中对应的值。if (i == 1) { //第一天时,首尾牢房没有两个相邻牢房,状态设为0。//存储第i天牢房的的状态。
2025-12-29 18:27:05
154
原创 回溯+位运算|前缀和优化背包
/ 等价于 pyramid[n-1][i] = bottom[i]&31。// 清除之前填的字母,等价于 pyramid[i][j] = 0。// 等价于 pyramid[i][j] = top。// 注意这里把 k 减小了。// 计算 f[i] 的前缀和数组 s。
2025-12-26 22:16:49
700
原创 2h看完了cpp的46宗罪
好了 再来说一些cpp的优点吧 ai时代不说十年 明年发生什么其实都不知道 做当下想做的事情 别的都无所谓了 just do it。至于项目 感觉什么语言不是特别重要,哎反正能构造出想要的东西就行,寒假应该会主要使用rust,了,algo用的还是cpp习惯了,尝试用rust写了几天,还是决定放过自己。笑傻了 还是太有生活了,感兴趣的可以自己去搜原视频。历史包袱 构成了cpp的庞大生态 亦是其包袱。当然这方面cpp还是优于rust的 &对比体现rust的优秀。
2025-12-26 21:17:55
281
原创 压缩trick
再逐一校验障碍物坐标,若障碍物坐标在机器人到达目标点前的路径中则返回false,否则返回true。将路径坐标编码存入集合,计算目标点在指令循环后的剩余坐标,验证其是否在单次路径中;//圈数位置 无法抵达。模拟机器人执行一次指令的路径。
2025-12-26 15:30:27
226
原创 贪心|最小生成树|分段
/ 存储切割成本和类型,pair第一个值为成本,第二个值0代表水平(H)、1代表垂直(V)不是真的要写最小生成树,是为了证明采用这种贪心策略是“正确的”,写出来的代码是等价的....如果切晚了会有增加segment的风险,而cost最大线段增加的总cost也最多。if (type == 0) { // 水平切割。} else { // 垂直切割。把这个题目转成最小生成树模型,那么正确性就证明完毕了。// 按成本从大到小排序。“高费用的线段越早切越好”
2025-12-26 12:01:23
145
原创 前缀和+贪心|状压优化hash
/ 取三个值的最大值:当前机器需移出的衣物数、前缀和绝对值、当前结果。取“单台机器超量数”和“累积流量绝对值”的最大值,得到最少操作步数。为什么 machines[i] - avg 不用取绝对值呢。通过前缀和计算衣物转移的累积流量。先判断衣物总数能否均分。
2025-12-24 19:38:30
166
原创 pq|dfs|快排
先建树,DFS回溯维护每个字符的最近祖先,把同字符子节点移到最近祖先下重构树,最后DFS统计每个节点的子树大小。// 注意这里已经把 1 算进去了。= -1) { // y 没被删除。
2025-12-24 17:51:10
794
原创 hash+滑窗|逆序
if(mins[i] - mins[i-2] <= 60) { // 第i个和前2个的时间差<=60分钟。// 2. 检查每个姓名的时间是否有1小时内>=3次。//1. hash分组。
2025-12-24 13:22:12
283
原创 排序|倒序遍历|set
lclcp52public:set<int> s;if (!dfs(root);i >= 0;--i) {return ret;
2025-12-24 10:17:52
253
原创 rotate模拟|pq贪心
重量: 空气<石头<障碍物,然后给三种符号赋大小不同的int型,然后以每排障碍物之间的小数组为单位对每排数组进行排序(障碍物不参与排序)先把每行石头按重力堆到右侧(遇障碍停),再把处理后的矩阵顺时针转90度得到结果。//落到障碍物前一个。还有一种也挺好的思路。
2025-12-23 17:12:30
395
原创 排序+等差求和
/ coins 已排序,后面没有比 c 更小的数了。int m = 0;// 一开始只能构造出 0。// 无法构造出 m+1,继续循环没有意义。// [0,m] 中一共有 m+1 个整数。对有序硬币数组,从0开始累加能连续构造的数值上限。,最终返回可构造的连续整数个数。
2025-12-23 13:14:12
125
原创 sqlist wal模式
WAL(Write-Ahead Log)是SQLite的预写式日志,核心是。看到一个用rust重写sqlist的项目在解决这个问题,随手普及记录一下。回滚日志下写操作会锁定数据库,读操作需等待写锁释放。回滚日志崩溃时,根据日志恢复被修改页的旧数据。WAL 重启时重放日志中的修改到数据库;WAL模式与传统回滚日志模式的核心区别。(相当于 又加了一个文件 解决问题)回滚日志是原地修改+写回滚页,WAL 是追加写日志,修改先。,保证事务原子性与持久性。
2025-12-22 18:14:38
162
原创 相邻不同_贪心
统计 nums 与 forbidden 对应位置相同元素,结合元素出现次数限制 (鸽巢 贪心_最多相同元素。计算使两数组对应位置元素匹配的最小交换次数。
2025-12-22 16:58:42
146
原创 cpp lambda vs 仿函数
1. 无捕获Lambda可被隐式转换为函数指针,或直接作为模板参数实例化,编译器能更轻松地做内联优化(消除函数调用开销);2. 有捕获Lambda本质是编译器自动生成的匿名仿函数,与手写仿函数的底层结构几乎一致,性能基本无差别。实际场景中,Lambda的“快”更多是写法简洁带来的优化友好性,而非语法本身的性能优势。而传统仿函数的 operator() 是否内联,取决于编译器对类成员函数的优化判断。Lambda表达式不一定比仿函数快,二者性能差异主要源于编译器优化策略。
2025-12-22 16:28:35
186
原创 贪心拆分
/ 奇数直接返回空。// 取下一个不同的偶数。先从2开始挨个加不同偶数,最后把剩下的数补到最后一个数上。// 从最小的偶数2开始取。// 补上剩余的差值。
2025-12-22 10:53:33
164
原创 差分+扫描线|子序列dp|区间覆盖查询
超过 sum 或 hi 后,修正失效,对应 d[sum+1]++ 和 d[hi+1]++ 把次数加回去。- 落在 [lo, sum) 区间的目标和,数对只需 1 次移动 → 总次数减 1,对应 d[lo]--。- 目标和等于 sum 时,数对无需移动 → 总次数再减 1,对应 d[sum]--。sum:差分在“全需 2 次移动”的基准上,按区间调整真实移动次数。差分统计数组两两配对和的不同区间所需移动次数,遍历求最小移动次数。//对可抵达的结果 差分。
2025-12-21 19:09:37
254
原创 贡献法+dfs|虚树
lc849public:total[x]++;continue;i <= mx;i++) {dfs(0, -1);return ans;
2025-12-21 14:48:58
299
原创 状压dp|dfs|dijk
每个工人分配部分任务,取“当前工人任务耗时”和“之前工人最大耗时”的较大值。预处理 抽象出jobs子集枚举 状态 +状压dp。最终找k个工人干完所有任务的最小最大耗时。
2025-12-20 15:29:15
232
原创 位运算
1 << (k - 1) 是 k 位二进制数的最高位掩码(比如 k=3 时就是 100 ), ~ 取反后和 cur 按位与,就能精准去掉超出 k 位的部分,保证 cur 始终是 k 位二进制对应的十进制数。- 第二步: 1 << (2-1) = 2 (二进制 10 ), ~2 对应二进制 ...1101 , 3 & ~2 = 1 (二进制 01 ),为下一次窗口右移做好准备。这等价于把旧数值的二进制整体左移 1 位,再补上右侧新字符的位。左移后数值的二进制位数会超过 k,用。
2025-12-20 08:56:32
245
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
71