文章目录

  • 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. 描述绘画结果(差分思想)相关推荐

  1. LeetCode 370. 区间加法(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 假设你有一个长度为 n 的数组,初始情况下所有的数字均为 0,你将会被给出 k​​​​​​​ 个更新的操作. 其中,每个操作会被表示为一个三元组:[sta ...

  2. LeetCode 1674. 使数组互补的最少操作次数(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit . 每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的 ...

  3. LeetCode 995. K 连续位的最小翻转次数(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 ...

  4. LeetCode 1109. 航班预订统计(差分思想)

    1. 题目 这里有 n 个航班,它们分别从 1 到 n 进行编号. 我们这儿有一份航班预订表,表中第 i 条预订记录 bookings[i] = [i, j, k] 意味着我们在从 i 到 j 的每个 ...

  5. LeetCode 732. 我的日程安排表 III(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int ...

  6. LeetCode刷题笔记(算法思想 四)

    LeetCode刷题笔记(算法思想 四) 七.动态规划 斐波那契数列 70. 爬楼梯 198. 打家劫舍 213. 打家劫舍 II 信件错排 母牛生产 矩阵路径 64. 最小路径和 62. 不同路径 ...

  7. 从一道easy级leetcode题目到分治法的思想

    在leetcode刷到一道题,本来挺简单的,但是如果考虑到时间复杂度,往优化算法方面想,就很有趣了,拿出来和大家分享下. Maximum Subarray 这个问题我们先看下问题的描述: 问题描述 F ...

  8. Leetcode 1109.航班预定统计 差分

    思路: 这道题假如要用暴力的方法,是过不去的.要使用差分的思想,创建一个差数组.因为本道题初始的座位数是0,直接建立一个全0数组即可. 参考代码: class Solution {public:vec ...

  9. [Leetcode][JAVA][第1111题][栈思想]

    [问题描述] 有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然.详情参见题末「有效括号字符串」部分.嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表 ...

最新文章

  1. 开源数据库技术分享及未来展望|CIC 真·全明星阵容
  2. matlab概率论实验 分别掷硬币1,基于Matlab的概率论仿真实验
  3. 计算机数据库基础知识笔记,计算机基础及技巧(我的电脑笔记,适合新手!包含使用电脑最基本的知识及DOS、网络及数据库等。)...
  4. Python应该怎么去练习和使用
  5. 水土保持功能评估中k值的计算公式
  6. c语言程序与实验系统,C/C ++程序设计学习与实验软件系统v2019 最新版下载_云间下载...
  7. supervisor、pm2、forever坐下来聊聊
  8. ble开发 linux_嵌入式开发的必备知识点
  9. 易语言API HOOK DeviceIOControl修改磁盘序列号
  10. 图论,回路,旅行商、邮递员问题。
  11. 修复win7更新服务器失败,Win7旗舰版系统Windows Update更新提示遇到未知错误的解决方法...
  12. Ubuntu18.04运行QQ音乐
  13. cousera课程 Introduction to Programming with MATLAB 范德堡大学 作业1
  14. 解决marathon上docker实例一直waitting的问题
  15. 最后介绍几个对程序员非常重要的24个软技能
  16. 共基、共射、共集三种放大电路
  17. 【前端】particle.js页面粒子效果
  18. 普通计算机如何按照mac,普通电脑怎么装苹果系统_普通笔记本能装苹果系统吗-win7之家...
  19. iOS下载不了迅雷怎么办
  20. 婚礼请帖_第一次在线婚礼发生在1876年

热门文章

  1. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)
  2. 镜像上传到linux失败,Docker push镜像失败解决方法
  3. 关闭浏览器网页触发事件_浅析浏览器渲染和 script 加载
  4. [django]django模型中auto_now和auto_now_add
  5. MySQL8.0版本和5.7通过Navicat远程连接
  6. HA机制的大数据集群的搭建过程
  7. python wordpress xmlrpc_python-markdown自动发送wordpress文章(python-xmlrpc-wordpress)
  8. 视觉在无人驾驶中的应用及分类_机器视觉在智能化生产中的广泛应用
  9. matlab打开笔记本摄像头_如何解决笔记本电脑摄像头异常问题
  10. Linux进程全解12——lIPC机制之管道,SystemV IPC介绍