当前位置:网站首页>LeetCode-732. 我的日程安排表 III,差分数组
LeetCode-732. 我的日程安排表 III,差分数组
2022-06-09 12:00:00 【litanyuan】
当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订。
给你一些日程安排 [start, end) ,请你在每个日程安排添加后,返回一个整数 k ,表示所有先前日程安排会产生的最大 k 次预订。
实现一个 MyCalendarThree 类来存放你的日程安排,你可以一直添加新的日程安排。
MyCalendarThree() 初始化对象。int book(int start, int end) 返回一个整数 k ,表示日历中存在的 k 次预订的最大值。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/my-calendar-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
背景
差分数组是把原数组中后一个元素减前一个元素的差构成一个新的数组,作为辅助数组使用。如下图所示:
diff[0] = nums[0];
diff[1] = nums[1] - nums[0];
diff[2] = nums[2] - nums[1];
...
nums[0] = diff[0];
nums[1] = diff[1] + nums[0] = diff[0] + diff[1];
nums[2] = nums[1] + diff[2] = diff[0] + diff[1] + diff[2];
根据差分数组各项的前缀和,即可还原出原数组各值,查分数组常用于对区间内元素值到统一修改。
应用
假如把 nums 数组中 [0,3] 范围到元素值都加 2:
常规方法:
for( int i =0;i < 4;++i)
{
nums[i] += 2;
}
差分方法:
diff[0] += 2;// 0 往后到值全部加 2
diff[4] -= 2;// 4 往后到值全部减 2
题目分析
有一个数组初始值全部为 0 ,每次调用 book 方法都把 [start,end) 范围内到元素加 1,并返回当前数组到最大值。
直接构建差分数组,更改区间值后再用前缀和还原出原数组即可。
#### 代码示例
class MyCalendarThree {
public:
MyCalendarThree() {
}
int book(int start, int end) {
diff[start]++;// start 开始的值都加 1
diff[end]--;// end 开始的值都减 1
int res = 0;
int cur = 0;
for( auto & kv : diff )
{
cur += kv.second;//前缀和还原原数组值
res = max(res,cur);
}
return res;
}
private:
map<int,int> diff;//差分数组
};
边栏推荐
- .NET基础知识快速通关11
- 炒作剽窃、内鬼欺诈 OpenSea上常见的NFT骗局及安全建议
- 10.<tag-二叉树和BST基础>lt.700. 二叉搜索树中的搜索 + lt.98. 验证二叉搜索树 + lt.530. 二叉搜索树的最小绝对差(同lt.783)
- 期货开户云,开户可靠安全吗??
- 你不得不懂的mysql隔离级别底层
- Origin 2022b | update and installation | switch between Chinese and English
- stc8a8k_rgb___LED 888测试代码,还没测试
- Resttemplate usage details and pit stepping records
- 3. < tag backtracking, combination and pruning > lt.17 Letter combination of telephone number
- Fairness through awareness
猜你喜欢

MySQL 乐观锁、悲观锁、多粒度锁

6. < tag backtracking and cutting problems > lt.131 Split palindrome string

9. lt.491 Longest increasing subsequence

Google chrome插件 | pagenote 网页标记

Safari的Favorites项不显示在主页上

LR11 installation error: vc2005 is missing on this computer_ sp1_ with_ atl_ fix_ Redist, please install all missing required components, and then run this installation again.

最佳实践 | 零基础实现小程序语音输入法

tag回溯-刷题预备知识-1. 回溯法模板, + lt.46. 全排列

Several ways of traversing map

.NET基础知识快速通关11
随机推荐
SIGIR 2022 | CMI:结合对比学习和多兴趣挖掘的微视频推荐
Origin:无法导入数据,粘贴数据卡死的解决办法
. Net basic knowledge quick pass 8
UDP可靠性实践
勤于奋说说这几天干嘛了
AGCO AI frontier promotion (6.9)
How does PostgreSQL speed up the recovery of transaction IDS through the vacuum
非常有用的 Flutter 技巧,你可以立即使用!
Golang RPC (7): how to debug grpc service
.NET基础知识快速通关10
直播预告|数据库沙龙—【开源生态专场】
UDP reliability practices
柴云鹏:创新能力的培养至关重要|OceanBase 数据库大赛访谈
6. < tag backtracking and cutting problems > lt.131 Split palindrome string
SIGIR 2022 | CMI: micro video recommendation combining comparative learning and multi interest mining
计算字符串公式的结果
2.<tag-回溯和组合及其剪枝>lt.216.组合总数 |||
Error in Library (patroon): there is no program package named 'patroon'
Redis数据结构与介绍
Several ways of traversing map