栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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

链接:https://leetcode.cn/problems/maximum-white-tiles-covered-by-a-carpet

思路

滑动窗口+排序
前缀和+二分+排序

代码

class Solution {
public:
    int maximumWhiteTiles(vector>& tiles, int carpetLen) {
    
        sort(tiles.begin(),tiles.end());

        vector presum(tiles.size(),0);        // 前缀和数组
        vector arr(tiles.size(),0);
        int n=tiles.size();


        for(int i=0;i
            presum[i]=(tiles[i][1]-tiles[i][0]+1);
            arr[i]=tiles[i][1];
        }

        for(int i=1;i
            presum[i]+=presum[i-1];
        }

        int ans=0;
        int cnt;
        int j;
        for(int i=0;i
            int r=tiles[i][0]+carpetLen-1;
            auto iter=lower_bound(arr.begin(),arr.end(),r);
            if(iter!=arr.end())
            j=iter-arr.begin();
            else
            j=n;

            cnt=(j-1>=0?presum[j-1]:0)-(i-1>=0?presum[i-1]:0);

            if(j=tiles[j][0])
            cnt+=(r-tiles[j][0]+1);

            ans=max(ans,cnt);

        }

        return ans;
        
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917452.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号