求选择最少的区间数目可以覆盖连续区间 [0,n]:跳跃游戏,视频拼接,灌溉花园的最少水龙头数目

news2024/10/7 14:31:59

选择最少区间数目覆盖区间。

贪心方法

假设有一个人想过桥,0 和 n 分别是河的两岸,一开始,人在 0

img

给你一些小区间,我们把这些区间视作桥。一开始我们肯定要选择包含 0 的区间,且要保证尽可能走得远。假如我们已经走到 4,那么下一条边该怎样选呢?

img

如此循环直到到达 n。修建桥的数量就是答案。

如果没有能够连接当前桥的区间,那么人不能到达对岸,这些区间不能完全覆盖整个数组。

题目:跳跃游戏

55. 跳跃游戏 - 力扣(Leetcode)

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

  • 1 <= nums.length <= 3 * 104
  • 0 <= nums[i] <= 105

思路

这道题可以看成是区间覆盖:

img

我们最后只要知道这些区间是否能完全覆盖整个数组。

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n = nums.size();
        int cur = 0, next = 0; 				// cur记录当前已经建好的桥的右端点,next记录下一次建桥能到达的最远端点
        for (int i = 0; i < n - 1; ++i) {	// 从0到n-2,当i==n-1时,人已经在终点了,没必要再进入循环了
            next = max(next, i + nums[i]);  // 更新能到达的最远端点
            if (i == cur) {					// 如果人已经在建好的桥的最右端点了,则继续建桥
                if (i == next) return false;// 如果能到达的最远端点还在当前位置,说明无法建桥,不能覆盖整个数组
                cur = next;					// 建桥
            }
        }
        return true;
    }
};

题目:跳跃游戏 II

45. 跳跃游戏 II - 力扣(Leetcode)

给定一个长度为 n0 索引整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i]
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]

思路

这一题把求是否能完全覆盖改成了求完全覆盖最少需要的区间个数。也就是建桥次数。

class Solution {
public:
    int jump(vector<int>& nums) {
        int n = nums.size();
        int cur = 0, next = 0;
        int res = 0;
        for (int i = 0; i < n - 1; ++i) {
            next = max(next, i + nums[i]);
            if (i == cur) {
                cur = next;
                ++res;
            }
        }
        return res;
    }
};

题目:视频拼接

1024. 视频拼接 - 力扣(Leetcode)

你将会获得一系列视频片段,这些片段来自于一项持续时长为 time 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。

使用数组 clips 描述所有的视频片段,其中 clips[i] = [starti, endi] 表示:某个视频片段开始于 starti 并于 endi 结束。

甚至可以对这些片段自由地再剪辑:

  • 例如,片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。

我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, time])。返回所需片段的最小数目,如果无法完成该任务,则返回 -1

示例 1:

输入:clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], time = 10
输出:3
解释:
选中 [0,2], [8,10], [1,9] 这三个片段。
然后,按下面的方案重制比赛片段:
将 [1,9] 再剪辑为 [1,2] + [2,8] + [8,9] 。
现在手上的片段为 [0,2] + [2,8] + [8,10],而这些覆盖了整场比赛 [0, 10]。

示例 2:

输入:clips = [[0,1],[1,2]], time = 5
输出:-1
解释:
无法只用 [0,1] 和 [1,2] 覆盖 [0,5] 的整个过程。

示例 3:

输入:clips = [[0,1],[6,8],[0,2],[5,6],[0,4],[0,3],[6,7],[1,3],[4,7],[1,4],[2,5],[2,6],[3,4],[4,5],[5,7],[6,9]], time = 9
输出:3
解释: 
选取片段 [0,4], [4,7] 和 [6,9] 。

提示:

  • 1 <= clips.length <= 100
  • 0 <= starti <= endi <= 100
  • 1 <= time <= 100

思路

一个求最少区间覆盖的裸题。可以可以直接套模板。不过在这之前,需要预处理一个数组 mostR

mostR[i] 表示 i 端点所能到达的最远端点。

class Solution {
public:
    int videoStitching(vector<vector<int>>& clips, int time) {
        vector<int> mostR(time + 1);
        for (auto& e : clips) {
            if (e[0] >= 0 && e[0] <= time) mostR[e[0]] = max(mostR[e[0]], e[1]);
        }
        int cur = 0, next = 0;
        int res = 0;
        for (int i = 0; i < time; ++i) {
            next = max(next, mostR[i]);
            if (i == cur) {
                if (i == next) return -1;
                cur = next;
                ++res;
            }
        }
        return res;
    }
};

题目:灌溉花园的最少水龙头数目

1326. 灌溉花园的最少水龙头数目 - 力扣(Leetcode)

在 x 轴上有一个一维的花园。花园长度为 n,从点 0 开始,到点 n 结束。

花园里总共有 n + 1 个水龙头,分别位于 [0, 1, ..., n]

给你一个整数 n 和一个长度为 n + 1 的整数数组 ranges ,其中 ranges[i] (下标从 0 开始)表示:如果打开点 i 处的水龙头,可以灌溉的区域为 [i - ranges[i], i + ranges[i]]

请你返回可以灌溉整个花园的 最少水龙头数目 。如果花园始终存在无法灌溉到的地方,请你返回 -1

示例 1:

img

输入:n = 5, ranges = [3,4,1,1,0,0]
输出:1
解释:
点 0 处的水龙头可以灌溉区间 [-3,3]
点 1 处的水龙头可以灌溉区间 [-3,5]
点 2 处的水龙头可以灌溉区间 [1,3]
点 3 处的水龙头可以灌溉区间 [2,4]
点 4 处的水龙头可以灌溉区间 [4,4]
点 5 处的水龙头可以灌溉区间 [5,5]
只需要打开点 1 处的水龙头即可灌溉整个花园 [0,5] 。

示例 2:

输入:n = 3, ranges = [0,0,0,0]
输出:-1
解释:即使打开所有水龙头,你也无法灌溉整个花园。

提示:

  • 1 <= n <= 104
  • ranges.length == n + 1
  • 0 <= ranges[i] <= 100

思路

和视频拼接类似,只是 mostR 数组的构建方法不同。

class Solution {
public:
    int minTaps(int n, vector<int>& ranges) {
        vector<int> mostR(n + 1);
        for (int i = 0; i <= n; ++i) {
            int r = ranges[i];
            if (i - r > 0) mostR[i - r] = i + r; // 一定是更大的,不需要取max
            else mostR[0] = max(mostR[0], i + r);
        }
        int res = 0, cur = 0, next = 0;
        for (int i = 0; i < n; ++i) {
            next = max(next, mostR[i]);
            if (i == cur) {
                if (next == i) return -1;
                cur = next;
                ++res;
            }
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解析Java中的class文件

解析class文件需要把class文件当成文件流来处理&#xff0c;定义ClassReader结构体 type ClassReader struct {data []byte }go语言中的reslice语法可以跳过已经读过的数据。 同时定义了ClassFile数据结构来描述class文件的各个部分&#xff0c;该数据结构如下所示&#xff1…

Scala流程控制(第四章:分支控制、嵌套分支、switch分支、for循环控制全、while与do~while、多重与中断)

文章目录第 4 章 流程控制4.1 分支控制 if-else4.1.1 单分支4.1.2 双分支4.1.3 多分支4.2 嵌套分支4.3 Switch 分支结构4.4 For 循环控制4.4.1 范围数据循环&#xff08;To&#xff09;4.4.2 范围数据循环&#xff08;Until&#xff09;4.4.3 循环守卫4.4.4 循环步长4.4.5 嵌套…

华为OD机试 - 最小传递延迟(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

户外跑步用什么耳机,最适合跑步用蓝牙耳机推荐

户外运动使用的蓝牙耳机&#xff0c;耳机在佩戴时需要考虑出行安全&#xff0c;耳机完全封闭耳道的耳机&#xff0c;会让我们对周围的情况不能及时做出反应&#xff0c;造成不必要的安全事故。如果在运动当中还不知道选择哪一些运动蓝牙耳机&#xff0c;可以看看下面这些分享~ …

【Azure 架构师学习笔记】-Azure Data Factory (2)-触发器

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (1)-调度入门 前言 上文介绍了ADF 的调度&#xff0c;在调度演示中&#xff0c;还有几个小按钮可以深究&#xff0c;如下图&#xff0c;有【…

小米AI 连接智能生活

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在多个领域落地并不断取得发展与突破。在互联网的推动下&#xff0c;AI语音助理、智能家居、眼镜相机等产品相继推出&#xff0c;打造了更加便捷的生活体验。秉承着“技术为本”的理念&#xff0c;小米始终致力于前沿…

【Go基础】数据库编程

文章目录1. SQL语法简介2. MySQL最佳实践3. Go SQL驱动接口解读4. 数据库增删改查5. stmt6. SQLBuilder6.1 Go-SQLBuilder6.2 Gendry6.3 自行实现SQLBuilder7. GORM8. Go操作MongoDB1. SQL语法简介 SQL&#xff08;Structured Query Language&#xff09;是一套语法标准&#…

2023美赛参赛经历分享

今天早上登录MCM: The Mathematical Contest in Modeling (comap.com)发现论文提交已经显示Received。虽然这几天连连有开学恶补的期末考试&#xff0c;但还是忙里偷闲趁着新鲜写一篇关于美赛的参赛个人感受。跟我一起打这次美赛的都是软件等专业的hxd&#xff0c;他们之前没有…

SpringBoot + Lock4j实现高性能分布式锁

1. 简介 在分布式业务开发中&#xff0c;很多场景都需要添加分布式锁。在具体实践过程中&#xff0c;研发人员都需要自行实现&#xff0c;导致实现方式不统一&#xff0c;代码风格迥异&#xff0c;难以维护。 在Mybatis-Plus生态中&#xff0c;Lock4j提供了支持redission、re…

华为OD机试 - 最大排列(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

python--matplotlib(4)

前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库&#xff0c;需要numpy库的支持&#xff0c;支持用户方便设计出二维、三维数据的图形显示&#xff0c;制作的图形达到出版级的标准。 其他matplotlib文章 python--matpl…

Spring Cloud Gateway Nacos 实现动态路由

微服务都是互相独立的&#xff0c;假如我们的网关和其他服务都在线上已经运行了好久&#xff0c;这个时候增加了一个微服务&#xff0c;这个时候要通过网关访问的话需要通过修改配置文件来增加路由规则&#xff0c;并且需要重启项目&#xff0c;所以我们需要实现动态路由 方式一…

34. 应用监控【监控端点配置】

当一个 Spring Boot 项目运行时&#xff0c;开发者需要对 Spring Boot 项目进行实时监控来获取项目的运行情况&#xff0c;在项目出错时能够实现自动报警等。 Spring Boot 提供了actuator 来帮助开发者获取应用程序的实时运行数据。开发者可以选择使用 HTTP 端点或JMX来管理和监…

九龙证券|银行资本管理办法迎“大修” 信用风险权重法调整优化

1年期AAA中债商业银行同业存单到期收益率 日前迎来“大修”的商业银行本钱办理方法&#xff0c;在债券商场激起“涟漪”——债券商场一改此前平静态势&#xff0c;连续两日跌落。 2月21日&#xff0c;10年期国债收益率较上星期五上行2.9个基点&#xff0c;至2.919%&#xff1b…

记录charles手机端配置https的成功过程

1.百度 https://www.likecs.com/show-204025787.html https://blog.csdn.net/enthan809882/article/details/117572094?spm1001.2101.3001.6650.6&utm_mediumdistribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaiduRate-6-117572094-blog-122959902.pc_rele…

余承东:问界就是华为生态汽车,不涉及20万以下车型

今天界面新闻发布了一篇余承东的专访文章&#xff0c;谈到了外界对华为造车的质疑&#xff0c;以及回应了与赛力斯的合作&#xff0c;后续HI模式与智选车模式如何推进的话题。摘录重点如下&#xff1a;1.首先&#xff0c;继续「不造车」“华为没有必要自己下场造车。”在他看来…

Spring MVC 源码 - HandlerMapping 组件(四)之 AbstractUrlHandlerMapping

HandlerMapping 组件HandlerMapping 组件&#xff0c;请求的处理器匹配器&#xff0c;负责为请求找到合适的 HandlerExecutionChain 处理器执行链&#xff0c;包含处理器&#xff08;handler&#xff09;和拦截器们&#xff08;interceptors&#xff09;handler 处理器是 Objec…

【GO】k8s 管理系统项目[前端部分–Header]

【GO】k8s 管理系统项目[前端部分–Header] 1. 实现功能 面包屑展开关闭按钮用户信息(退出按钮) 2. 代码部分 src/layout/Layout.vue 在之前预留header位置补上 <!-- header --><el-header class"header"><el-row :gutter"20"><e…

python基于vue健身房课程预约平台

可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发3 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2.5 django框架 5 3 系统分析 6 3.1…

Sqoop利用Sql将mysql表_导入数据到Hive---大数据之Apache Sqoop工作笔记004

然后来看一下把数据导入到hive中去 可以去官网去看看文档,有什么参数 这里用的是hive-import对吧,然后 这里hive-overwrite是覆盖 这个hive-table staff_hive 是创建 一个hive的表是 staff_hive 然后我们先去启动一下hive 启动以后,然后我们去查一下,shot tables 可以看到 里…