LeetCode 1943. 描述绘画结果(差分思想)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个细长的画,用数轴表示。
这幅画由若干有重叠的线段表示,每个线段有 独一无二 的颜色。
给你二维整数数组 segments ,其中 segments[i] = [starti, endi, colori]
表示线段为 半开区间 [starti, endi)
且颜色为 colori
。
线段间重叠部分的颜色会被 混合 。
如果有两种或者更多颜色混合时,它们会形成一种新的颜色,用一个 集合 表示这个混合颜色。
比方说,如果颜色 2 ,4 和 6 被混合,那么结果颜色为 {2,4,6} 。
为了简化题目,你不需要输出整个集合,只需要用集合中所有元素的 和 来表示颜色集合。
你想要用 最少数目 不重叠 半开区间 来 表示 这幅混合颜色的画。这些线段可以用二维数组 painting 表示,其中 painting[j] = [leftj, rightj, mixj]
表示一个 半开区间[leftj, rightj)
的颜色 和 为 mixj
。
比方说,这幅画由 segments = [[1,4,5],[1,7,7]] 组成,那么它可以表示为 painting = [[1,4,12],[4,7,7]] ,因为:
[1,4) 由颜色 {5,7} 组成(和为 12),分别来自第一个线段和第二个线段。
[4,7) 由颜色 {7} 组成,来自第二个线段。
请你返回二维数组 painting ,它表示最终绘画的结果(没有 被涂色的部分不出现在结果中)。
你可以按 任意顺序
返回最终数组的结果。
半开区间 [a, b) 是数轴上点 a 和点 b 之间的部分,包含 点 a 且 不包含 点 b 。
示例 1:
输入:segments = [[1,4,5],[4,7,7],[1,7,9]]
输出:[[1,4,14],[4,7,16]]
解释:绘画借故偶可以表示为:
- [1,4) 颜色为 {5,9} (和为 14),分别来自第一和第二个线段。
- [4,7) 颜色为 {7,9} (和为 16),分别来自第二和第三个线段。
示例 2:
输入:segments = [[1,7,9],[6,8,15],[8,10,7]]
输出:[[1,6,9],[6,7,24],[7,8,15],[8,10,7]]
解释:绘画结果可以以表示为:
- [1,6) 颜色为 9 ,来自第一个线段。
- [6,7) 颜色为 {9,15} (和为 24),来自第一和第二个线段。
- [7,8) 颜色为 15 ,来自第二个线段。
- [8,10) 颜色为 7 ,来自第三个线段。
示例 3:
输入:segments = [[1,4,5],[1,4,7],[4,7,1],[4,7,11]]
输出:[[1,4,12],[4,7,12]]
解释:绘画结果可以表示为:
- [1,4) 颜色为 {5,7} (和为 12),分别来自第一和第二个线段。
- [4,7) 颜色为 {1,11} (和为 12),分别来自第三和第四个线段。
注意,只返回一个单独的线段 [1,7) 是不正确的,因为混合颜色的集合不相同。提示:
1 <= segments.length <= 2 * 10^4
segments[i].length == 3
1 <= starti < endi <= 10^5
1 <= colori <= 10^9
每种颜色 colori 互不相同。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/describe-the-painting
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
参考:差分思想题目
class Solution {public:vector<vector<long long>> splitPainting(vector<vector<int>>& segments) {map<int, long long> m;vector<vector<long long>> ans;for(auto &s : segments){m[s[0]] += s[2];m[s[1]] -= s[2];}long long sum = 0;for(auto it = m.begin(); it != m.end(); ++it){int start = it->first, end;auto it1 = it;if(++it1 == m.end())break;elseend = it1->first;//下一个端点sum += it->second;//求各个端点的和if(sum) // 不为 0ans.push_back({start, end, sum});}return ans;}
};
388 ms 100.8 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1943. 描述绘画结果(差分思想)相关推荐
- LeetCode 370. 区间加法(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 假设你有一个长度为 n 的数组,初始情况下所有的数字均为 0,你将会被给出 k 个更新的操作. 其中,每个操作会被表示为一个三元组:[sta ...
- LeetCode 1674. 使数组互补的最少操作次数(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit . 每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的 ...
- LeetCode 995. K 连续位的最小翻转次数(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 ...
- LeetCode 1109. 航班预订统计(差分思想)
1. 题目 这里有 n 个航班,它们分别从 1 到 n 进行编号. 我们这儿有一份航班预订表,表中第 i 条预订记录 bookings[i] = [i, j, k] 意味着我们在从 i 到 j 的每个 ...
- LeetCode 732. 我的日程安排表 III(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int ...
- LeetCode刷题笔记(算法思想 四)
LeetCode刷题笔记(算法思想 四) 七.动态规划 斐波那契数列 70. 爬楼梯 198. 打家劫舍 213. 打家劫舍 II 信件错排 母牛生产 矩阵路径 64. 最小路径和 62. 不同路径 ...
- 从一道easy级leetcode题目到分治法的思想
在leetcode刷到一道题,本来挺简单的,但是如果考虑到时间复杂度,往优化算法方面想,就很有趣了,拿出来和大家分享下. Maximum Subarray 这个问题我们先看下问题的描述: 问题描述 F ...
- Leetcode 1109.航班预定统计 差分
思路: 这道题假如要用暴力的方法,是过不去的.要使用差分的思想,创建一个差数组.因为本道题初始的座位数是0,直接建立一个全0数组即可. 参考代码: class Solution {public:vec ...
- [Leetcode][JAVA][第1111题][栈思想]
[问题描述] 有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然.详情参见题末「有效括号字符串」部分.嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表 ...
最新文章
- 开源数据库技术分享及未来展望|CIC 真·全明星阵容
- matlab概率论实验 分别掷硬币1,基于Matlab的概率论仿真实验
- 计算机数据库基础知识笔记,计算机基础及技巧(我的电脑笔记,适合新手!包含使用电脑最基本的知识及DOS、网络及数据库等。)...
- Python应该怎么去练习和使用
- 水土保持功能评估中k值的计算公式
- c语言程序与实验系统,C/C ++程序设计学习与实验软件系统v2019 最新版下载_云间下载...
- supervisor、pm2、forever坐下来聊聊
- ble开发 linux_嵌入式开发的必备知识点
- 易语言API HOOK DeviceIOControl修改磁盘序列号
- 图论,回路,旅行商、邮递员问题。
- 修复win7更新服务器失败,Win7旗舰版系统Windows Update更新提示遇到未知错误的解决方法...
- Ubuntu18.04运行QQ音乐
- cousera课程 Introduction to Programming with MATLAB 范德堡大学 作业1
- 解决marathon上docker实例一直waitting的问题
- 最后介绍几个对程序员非常重要的24个软技能
- 共基、共射、共集三种放大电路
- 【前端】particle.js页面粒子效果
- 普通计算机如何按照mac,普通电脑怎么装苹果系统_普通笔记本能装苹果系统吗-win7之家...
- iOS下载不了迅雷怎么办
- 婚礼请帖_第一次在线婚礼发生在1876年
热门文章
- 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)
- 镜像上传到linux失败,Docker push镜像失败解决方法
- 关闭浏览器网页触发事件_浅析浏览器渲染和 script 加载
- [django]django模型中auto_now和auto_now_add
- MySQL8.0版本和5.7通过Navicat远程连接
- HA机制的大数据集群的搭建过程
- python wordpress xmlrpc_python-markdown自动发送wordpress文章(python-xmlrpc-wordpress)
- 视觉在无人驾驶中的应用及分类_机器视觉在智能化生产中的广泛应用
- matlab打开笔记本摄像头_如何解决笔记本电脑摄像头异常问题
- Linux进程全解12——lIPC机制之管道,SystemV IPC介绍