2022年5月14日LeetCode双周赛第三题-6068. 毯子覆盖的最多白色砖块数

简介: 2022年5月14日LeetCode双周赛第三题-6068. 毯子覆盖的最多白色砖块数

6068. 毯子覆盖的最多白色砖块数


难度中等4收藏分享切换为英文接收动态反馈


给你一个二维整数数组 tiles ,其中 tiles[i] = [li, ri] ,表示所有在 li <= j <= ri 之间的每个瓷砖位置 j 都被涂成了白色。


同时给你一个整数 carpetLen ,表示可以放在 任何位置 的一块毯子。


请你返回使用这块毯子,最多 可以盖住多少块瓷砖。


示例 1:


image.png


输入:tiles = [[1,5],[10,11],[12,18],[20,25],[30,32]], carpetLen = 10

输出:9

解释:将毯子从瓷砖 10 开始放置。

总共覆盖 9 块瓷砖,所以返回 9 。

注意可能有其他方案也可以覆盖 9 块瓷砖。

可以看出,瓷砖无法覆盖超过 9 块瓷砖。

示例 2:


image.png


输入:tiles = [[10,11],[1,1]], carpetLen = 2

输出:2

解释:将毯子从瓷砖 10 开始放置。

总共覆盖 2 块瓷砖,所以我们返回 2 。

提示:


1 <= tiles.length <= 5 * 104

tiles[i].length == 2

1 <= li <= ri <= 109

1 <= carpetLen <= 109

tiles 互相 不会重叠 。

通过次数1,719提交次数7,860


题意:

滑动窗口,不停的判断当前区间的满足要求吗?

如果没超过毯子的覆盖范围,则访问下一个区间继续,如果超过了则取最后一个区间内毯子的长度

左区间也得不停的维护


Python代码:

class Solution:
    def maximumWhiteTiles(self, tiles: List[List[int]], carpetLen: int) -> int:
        tiles.sort()#数组排序
        ans , j , cout = 0 , 0 , 0
        for i in range(len(tiles)):
            while j<len(tiles) and (tiles[j][1]+1-tiles[i][0]<=carpetLen):
                cout += (tiles[j][1] - tiles[j][0] + 1)#如果还没超过毯子,那么累加
                j += 1#右区间右移
            if j<len(tiles):  #如果毯子不够长了,那么久加上最后一个区间内毯子占的长度
                ans = max(ans , cout+max(0 , carpetLen-(tiles[j][0] - tiles[i][0])))
            else:
                ans = max(ans , cout)  #说明毯子覆盖全部区间了,直接取最大
            cout -= tiles[i][1] - tiles[i][0] + 1  #左区间右移
        return ans

C++代码:

class Solution {
public:
    int maximumWhiteTiles(vector<vector<int>>& tiles, int carpetLen) {
        sort(tiles.begin() , tiles.end());
        int j=0 , ans=0 , cout = 0;
        for(int i=0; i<tiles.size(); i++){
            while(j<tiles.size() && (tiles[j][1] - tiles[i][0] + 1)<=carpetLen){
                cout += tiles[j][1] - tiles[j][0] + 1; 
                j++;
            }
            if (j<tiles.size()) {
                ans = max(ans , cout + max(0 , tiles[i][0] + carpetLen - tiles[j][0]));
            }
            else ans = max(ans , cout);
            cout -= tiles[i][1] - tiles[i][0] + 1;
相关文章
|
7月前
Leetcode第123场双周赛
在LeetCode的第123场双周赛中,参赛者需解决三个问题。第一题涉及根据给定数组构建三角形并判断其类型,如等边、等腰或不等边,代码实现通过排序简化条件判断。第二题要求找出满足差值为k的好子数组的最大和,解决方案利用前缀和与哈希表提高效率。第三题则需要计算点集中满足特定条件的点对数量,解题策略是对点按坐标排序并检查点对是否满足要求。
27 1
|
7月前
力扣双周赛 -- 117(容斥原理专场)
力扣双周赛 -- 117(容斥原理专场)
【Leetcode】- 第 29 场双周赛
【Leetcode】- 第 29 场双周赛
|
机器人
LeetCode 双周赛 106(2023/06/10)两道思维题
往期回顾:[LeetCode 单周赛第 348 场 · 数位 DP 模版学会了吗?](https://mp.weixin.qq.com/s/4aLHpyaLOUEHSaX2X8e5FQ)
87 0
LeetCode 双周赛 106(2023/06/10)两道思维题
|
算法 索引
LeetCode 双周赛 107(2023/06/24)滑动窗口与离散化
> **本文已收录到 [AndroidFamily](https://github.com/pengxurui/AndroidFamily),技术和职场问题,请关注公众号 \[彭旭锐] 和 \[BaguTree Pro] 知识星球提问。**
76 0
LeetCode 双周赛 107(2023/06/24)滑动窗口与离散化
|
边缘计算 缓存 算法
LeetCode 双周赛 102,模拟 / BFS / Dijkstra / Floyd
昨晚是 LeetCode 双周赛第 102 场,你参加了吗?这场比赛比较简单,拼的是板子手速,继上周掉大分后算是回了一口血 😁。
111 0
|
人工智能 算法 测试技术
LeetCode 双周赛 101,DP / 中位数贪心 / 裴蜀定理 / Dijkstra / 最小环
这周比较忙,上周末的双周赛题解现在才更新,虽迟但到哈。上周末这场是 LeetCode 第 101 场双周赛,整体有点难度,第 3 题似乎比第 4 题还难一些。
100 0
|
存储 数据安全/隐私保护