入门力扣自学笔记236 C++ (题目编号:1326)(贪心算法)

news2025/2/24 15:43:26

1326. 灌溉花园的最少水龙头数目

题目:

在 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:

 输入: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


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-number-of-taps-to-open-to-water-a-garden
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路:

这道题主要采用贪心算法。

对于第i个位置花盆的灌溉,我们要把所有能灌溉到这盆花的水龙头,找出来,选择哪个能灌溉到“尽量远” (在x轴的右侧,能灌溉得更远)位置的水龙头。

1.首现计算,每个水龙头的灌溉区域range[i] = {left[i], right[i]}。
2.按照起点(left[i])对range数组排序。
3.从花盆角度去遍历,curPos = 0(首现考虑第0盆花的灌溉),对range数组遍历,寻找所以left[i] <= curPos的range[i],因为range数组已经排序,所以这些满足要求的range[i]是顺序排列的,只需遍历即可,但找到某一个range[i],其left[i] > curPos,则说明对于当前curPos的水龙头已经找全,找到这些水龙头中能灌溉得最远的哪一个(right[i]最大)进行选择,即完成了一个水龙头的确定,将curPos设置为max(right[i])(能灌溉最远的水龙头的右侧边界),持续这个过程,直到curPos = n
或者对于当前的CurPos,不存在任何的range[i]满足left[i] <= curPos,此时无解。


代码:

class Solution {
public:
    int minTaps(int n, vector<int>& ranges) {
        vector<pair<int,int>> data;
        data.reserve(ranges.size());
        for(int i = 0;i < ranges.size();i++)
            data.push_back(make_pair(i - ranges[i],i + ranges[i]));
        //按照每一个水龙头可以灌溉的起点,按照从小到大的顺序排列
        sort(data.begin(),data.end(),[](const pair<int,int> &a,const pair<int,int> &b)
        {
            return a.first < b.first;
        }
        );
        int ret = 1;
        int curpos = 0;
        int tmp = 0;
        bool findnext = false;
        for(int i = 0;i < data.size();)
        {
            if(data[i].first <= curpos)
            {
                tmp = max(tmp,data[i].second);
                i++;
                findnext = true;
            }
            else
            {
                if(!findnext)
                    return -1;
                findnext = false;
                if(tmp >= n)
                    break;
                curpos = tmp;
                ret++;
            }
        }
        if(tmp < n)
            return -1;
        else
            return ret;
    }
};

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

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

相关文章

江南爱窗帘十大品牌 | 推荐3种简单的窗帘上色方法

窗帘可以在色彩搭配好的空间里营造温度和情调&#xff1f;窗帘不仅是用来挡光的&#xff0c;更能营造温暖和氛围家。除了成品家具&#xff0c;家中软装的另一大部分就是窗帘了。窗帘的颜色搭配好&#xff0c;我们家瞬间有温度。今天我们将讨论一些简单的窗帘上色方法。1、窗帘我…

计算机网络基础知识--数据链路层协议

目录 使用点对点信道的数据链路层 数据链路层的三个基本问题 封装成帧 透明传输 差错检测 点对点协议PPP PPP协议的组成 PPP帧的格式 数据链路层的协议数据单元是帧。数据链路层把网络层交下来的数据构成帧发送到链路上&#xff0c;以及把接收到的帧中的数据取出并上交网…

VR全景带你打卡《狂飙》经典取景地!

热度“狂飙”&#xff01;电视剧《狂飙》的取景地——江门墟顶老街人气火爆&#xff0c;720VR全景带您了解&#xff0c;这个具有新活力的老街区&#xff0c;蛙色3DVR提供技术支持&#xff01;通过航拍VR全景&#xff0c;全方位展示江门历史文化街区&#xff0c;720浏览&#xf…

3 nacos与其他注册中心对比以及提升

对比如下&#xff1a; CAP模型&#xff1a; 计算机专家 埃里克布鲁尔&#xff08;Eric Brewer&#xff09;于 2000 年在 ACM 分布式计算机原理专题讨论会&#xff08;简称&#xff1a;PODC&#xff09;中提出的分布式系统设计要考虑的三个核心要素&#xff1a; (1) 一致性&am…

appium自动化测试

获取应用包名和入口activity&#xff1a;aapt命令 aapt目录&#xff1a; 安卓sdk的build-tools目录下(如果要在cmd里直接运行&#xff0c;要配置环境变量&#xff0c;否则需要在aapt所在目录下打开cmd) 示例&#xff1a; adt-bundle-windows-x86_64-20140702\sdk\build-too…

微信小程序开发(二)

一、封装request.js请求文件 目的&#xff1a;优化代码结构以及后期项目版本迭代和维护更加方便&#xff0c;提升代码的执行速度。 假设在原生page中使用基本写法创建ajax请求&#xff0c;则会出现以下问题&#xff1a; 1、page界面业务操作代码混乱&#xff0c;代码多层嵌套…

Hudi(26):Hudi集成Hive之同步工具

目录 0. 相关文章链接 1. 同步工具概述 2. 使用语法及参数 2.1. 语法 2.2. 参数说明 3. 解决依赖问题 3.1. 解决点一&#xff1a;修改hadoop、hive、hudi-hive-sync-bundle-0.12.0.jar的依赖加载 3.2. 解决点二&#xff1a;解决parquet-column的版本冲突 4. JDBC模式同…

buu [WUSTCTF2020]dp_leaking_1s_very_d@angerous 1

题目描述&#xff1a; e 65537 n 1568083435985787749573756968151889806821667406093028310996964920682463371987925108988184962391663390152073051021014316342831685444929845865667999964711502523821441482572367072472675061656708775063702531276953141639870840764…

Docker竟如此简单!

文章目录什么是容器&#xff1f;容器隔离何为“边界”&#xff1f;容器和虚拟机一样吗&#xff1f;基于 Linux Namespace 隔离机制的弊端容器限制何为“限制”&#xff1f;Cgroups 对资源的限制能力缺陷单进程模型容器镜像容器的诞生容器的一致性何为“层&#xff08;layer&…

前端必须知道的http知识

HTTP协议也叫超文本传输协议&#xff0c;是一种基于TCP/IP的应用层通信协议&#xff0c;这个协议详细规定了浏览器和万维网服务器之间互相通信的规则&#xff08;报文&#xff0c;请求报文、响应报文&#xff09; 请求方式 HTTP设定了八种发送请求方式&#xff0c;这八种方法没…

SpringCloud(二)配置中心

配置中心Nacos配置中心多环境共享Nacos集群搭建Nacos配置中心 作用&#xff1a; 统一配置管理配置自动刷新&#xff0c;热更新 实现&#xff1a; 统一配置管理 在nacos服务端&#xff0c;配置管理配置列表中新建配置了解配置获取的步骤&#xff1a; 项目启动->读取nacos中…

MySQL中有多少种索引?索引的底层实现原理

索引存储在内存中&#xff0c;为服务器存储引擎为了快速找到记录的一种数据结构。索引的主要作用是加快数据查找速度&#xff0c;提高数据库的性能。索引的分类(1) 普通索引&#xff1a;最基本的索引&#xff0c;它没有任何限制。(2) 唯一索引&#xff1a;与普通索引类似&#…

Java技术之注解

前言 Java的反射和注解是Java和Android程序员必须掌握的技术&#xff0c;注解使程序员可以将重复冗余的工作封装到一个框架里面&#xff0c;提供一个简单的API接口给程序使用&#xff0c;典型的有黄油刀(ButterKnife)、ARouter、EventBus等都使用了注解。这些优秀的框架都是使…

win7下安装postgreSQL教程

系统环境&#xff1a;Windows 7 旗舰版 64位操作系统 安装版本&#xff1a;postgresql-9.1.4-1-windows-x64 安装步骤&#xff1a; 1、下载系统对应的软件版本&#xff1b; 2、双击“postgresql-9.1.4-1-windows-x64.exe”打开安装窗口&#xff1b; 3、Welcome页&#xff0c;…

ChatGPT来了,英语不能丢,但我不想上班

文 / 谷雨&#xff08;微信公众号&#xff1a;王不留&#xff09; 好久没写文&#xff0c;可能大伙已把我忘了。春节之后&#xff0c;状态一直不太好。我在2月1号时从老家直接来到了深圳出差&#xff0c;而后以996的工作状态疲于应付工作中的各种问题。 终于这周末休息了两天&a…

【linux安装redis详解】小白如何安装部署redis,linux安装部署只需5步骤(图文结合,亲测有效)

【写在前面】前端时间接触了一下redis&#xff0c;也是迫于页面查询响应太慢&#xff0c;没办法听说redis这个可持久化内存数据库&#xff0c;于是乎便想着在自己的机器上安装一套&#xff0c;接下来就重点和大家说说怎么从小白开始摸索redis 目录1、下载2、安装2.1 创建文件存…

全开源无加密的RuleApp文章社区APP客户端源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 开源无加密的文章社区客户端源码分享 RuleApp文章社区&#xff0c;VIP会员&#xff0c;写作投稿积分商城&#xff0c;付费模块集成&#xff0c;多平台兼容这是一款开源免费&#xff0c;界…

事件流、事件冒泡、阻止冒泡

1、事件流 2、事件冒泡&#xff1a;从小到大 概念&#xff1a; 当一个元素的事件被触发时&#xff0c;同样的事件将会在该元素的所有祖先元素中依次被触发。这一过程被称为事件冒泡 <style> .father{width: 300px;height: 300px;background-color: pink; } .son{width:…

sshdo使用training mode来获得incoming ssh会执行什么命令

前言上一篇文章(使用sshdo限制incoming ssh只能执行指定命令)[https://blog.csdn.net/thesre/article/details/129135045] 介绍了如何配置并使用sshdo。有同学就遇到问题了&#xff0c;说我怎么知道我要允许哪些命令&#xff1f;那么&#xff0c;本文以TurboVNC客户端连接Turbo…

2023-02-20干活小计:

所以我今天的活开始了&#xff1a; In this paper, the authors target the problem of Multimodal Name Entity Recognition(MNER) as an improvement on NER(text only) The paper proposes a multimodal fusion based on a heterogeneous graph of texts and images to mak…