news 2026/6/24 20:15:05

优雅的分组贪心|线段树二分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
优雅的分组贪心|线段树二分

许多优化 都是边遍历 边更新维护

可以借助各种数据结构(轮子bush

来减少循环次数 即时间复杂度 更快的拿到ret

lc3480

维护每个数字对应的最小、次小冲突值,计算无冲突子数组的最大数量,最终结合额外可扩展的子数组数量得到结果。

class Solution {
public:
long long maxSubarrays(int n, vector<vector<int>>& conflictingPairs) {
vector<vector<int>> groups(n + 1);
for (auto& p : conflictingPairs) {
int a = p[0], b = p[1];
if (a > b) {
swap(a, b);
}
groups[a].push_back(b);
}

long long ans = 0;
vector<long long> extra(n + 2);
vector<int> b = {n + 1, n + 1};

for (int i = n; i > 0; i--) {
// 维护最小 b 和次小 b
b.insert(b.end(), groups[i].begin(), groups[i].end());
ranges::sort(b);
b.resize(2);

ans += b[0] - i;
extra[b[0]] += b[1] - b[0];
}

return ans + ranges::max(extra);
}
};

lc3479

线段树二分 vs 树状数组

感觉线段树和树状数组本质上很相似,这俩的区别和应用场景是不一样么?

  • 可差分数据和不可差分数据的区别吧,比如最大值,树状数组只能够维护前缀的最大值
  • 树状数组适用于计算【差】信息的场景(比如子数组和等于两个前缀和的差)
  • 但对于求最大最小的问题不好处理,比如修改元素 + 计算区间最大值的情况,用线段树更合适
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 6:05:07

‌如何测试AI的“长上下文记忆”?

长上下文记忆测试的本质是“信息持久性验证”‌ AI的“长上下文记忆”并非真正记忆&#xff0c;而是模型在单次推理中对输入序列的‌上下文窗口内信息的保持与推理能力‌。测试目标不是验证“记住”&#xff0c;而是验证‌关键信息在超长对话链中是否可被准确召回、正确引用、…

作者头像 李华
网站建设 2026/6/11 23:41:00

批量解密神器,没有限制

有的时候在网上下载了PDF文档&#xff0c;发现都没有办法进行任何的操作&#xff0c;就连打印权限都没有。今天给大家介绍的这款软件可以一键帮你进行PDF解密&#xff0c;非常方便&#xff0c;完全免费&#xff0c;有需要的小伙伴可以下载收藏。 PDF智能助手 批量解密PDF文件 …

作者头像 李华
网站建设 2026/6/18 2:43:56

性能测试与代码覆盖率联动方案

1. 背景与重要性 在软件开发周期中&#xff0c;性能测试和代码覆盖率分析是两大核心质量保障手段。性能测试评估系统在高负载下的响应时间、吞吐量等指标&#xff0c;确保软件在真实环境中的稳定性&#xff1b;代码覆盖率则衡量测试用例对源代码的覆盖程度&#xff0c;包括语句…

作者头像 李华