leetcode 1326. Minimum Number of Taps to Open to Water a Garden

开发框架Furion之WebApi+SqlSugar (一) MyFurion.Model项目中,通过Nuget添加Furion、Furion.Extras.DatabaseAccessor.SqlSugar、Furion.Extras.ObjectMapper.Mapster、SqlSugarCore,同时添加对项目MyFurion.Unility的引用。在MyFurion.Start项目中,通过Nuget添加 AspNetCoreRateLimit、System.Linq.Dynamic.Core,同时添加对项目MyFurion.Application的引用。 阅读详情

在这里插入图片描述

x轴上的花园范围为[0,n], 0~n这个n+1个离散点上有水龙头,第 i 个水龙头能浇水的范围为[i-ranges[i], i+ranges[i]].
求能浇整个花园的最小水龙头个数。

思路:

方法一:
greedy

先把每个水龙头能浇的区间准备好,
用一个数组保存所有区间,数组下标为区间起点,数组内容为区间终点。

然后从左到右遍历这个数组,到这里就和55题Jump Game类似了。
用一个变量canReach表示到目前的水龙头为止能浇到的最远距离。preEnd表示前一个水龙头的区间终点。

如果当前位置 > preEnd,说明需要开一个新的水龙头,
但是如果这时canReach <= preEnd(前一水龙头处能浇到的最远距离也无法到达当前位置,后面有说明),说明无法到达,返回-1.
更新preEnd到canReach (canReach这时还没有更新,即preEnd更新到前一个水龙头为止的最远范围). 水龙头个数+1.
把canReach更新到和当前区间终点相比的较大值。

有一个特殊情况要注意下,就是Example2中ranges[i]=0的情况。
注意能浇水到整个花园说明不止是离散点i , i+1, …能浇到,i 到 i+1之间的连续点部分也必须在区间中。
而ranges[i] = 0 表示只能浇到离散点 i 本身。比如1,2点能浇到,但它们之间的1.1, 1.2, …都不在浇灌范围。
所以在处理区间时,canReach必须能到达当前点才算满足条件。

    public int minTaps(int n, int[] ranges) {
        int preEnd = 0;
        int canReach = 0;
        int[] startEnd = new int[n+1];
        int cnt = 0;

        for(int i = 0; i <= n; i++) {
            if(ranges[i] == 0) continue;
            int start = (i - ranges[i] < 0 ? 0 : i - ranges[i]);
            int end = (i + ranges[i] > n ? n : i + ranges[i]);
            startEnd[start] = end;
        }

        for(int i = 0; i <= n; i++) {
            if(i > preEnd) {
                if(canReach <= preEnd) return -1;
                cnt ++;
                preEnd = canReach;
            }
            if(startEnd[i] > canReach) canReach = startEnd[i];
        }
		//cnt是前一区间满足条件时在当前区间加的,最后一个区间没有下一区间去处理,所以要在最后处理一下
		//如果preEnd能到达最后位置,就不需要cnt+1,如果到不了,需要再cnt++,preEnd更新到canReach
        return cnt + (preEnd < n ? 1 : 0);
    }

方法二:

DP
dp[i ] 表示浇到 i 位置所需的水龙头个数。
开始的时候,除了dp[0],其他全部初始化为无穷大。

还是像上面一样从左到右计算每个水龙头的浇水区间。
区间内每个点处所需的最少水龙头个数dp[ i ] = min(dp[i], dp[区间的起点]+1).
这是什么意义呢?
因为dp[0]=0, 当更新水龙头0的区间时,都会以dp[0]+1为准,把0处的水龙头能浇到的范围内,每个点处所需水龙头个数更新为1.
假设第一个区间为[0,2],更新如下
1 1 1 Inf Inf Inf
这时假如进入下一区间[2,4],那么在2的位置,仍然可以保持dp[2]=min(dp[2], dp[2]+1)=1.
到了位置3时,dp[3]=min(Inf,dp[2]+1)就变成需要2个水龙头。
同样的,如果前一范围覆盖不到后面的区间,就会出现min(inf, inf+1)的情况。
最后返回dp[n], 如果dp[n]为Inf, 说明无法浇到整个花园,返回-1.

    public int minTaps(int n, int[] ranges) {
        final int INF = 100000;
        int[] dp = new int[n+1];
        Arrays.fill(dp, INF);
        dp[0] = 0;

        for(int i = 0; i <= n; i++) {
            int start = (i-ranges[i] < 0 ? 0 : i-ranges[i]);
            int end = (i + ranges[i] > n ? n : i+ranges[i]);
            for(int j = start; j <= end; j++){
                dp[j] = Math.min(dp[j], dp[start]+1);
            }
        }
        return dp[n] == INF ? -1 : dp[n];
    }
高通IPA硬件加速介绍 ‌ 高通IPA (Internet Protocol Accelerator)模块是一种硬件加速模块,由高通公司(Qualcomm)提供,主要用于优化移动设备上的网络数据传输,特别是通过 LTE 、 5G 等移动网络的数据传输‌‌。IPA模块通过硬件加速,显著提高了数据传输的速度和效率,同时降低了设备的功耗,并提供了更稳定的网络连接,减少了数据传输中的丢包和延迟‌。 阅读详情

相关推荐

利用易特天下 ipbox&零层壹号 sdwan 组网盒子实现异地组网

一款支持zerotier的异地组网盒子

v808v808的博客 3347

[Leetcode 1326] Minimum Number of Taps to Open to Water a Garden

1326. Minimum Number of Taps to Open to Water a Garden 1326. 灌溉花园的最少水龙头数目 Intuition We can build a interval for each tap representing the area it covers. Each time we pick an interval, we choose the o...

zdxiq000的专栏 624

深度学习、图像分类入门,从VGG16卷积神经网络开始

刚开始接触深度学习、卷积神经网络的时候非常懵逼,不知道从何入手,我觉得应该有一个进阶的过程,也就是说,理应有一些基本概念作为奠基石,让你有底气去完全理解一个庞大的卷积神经网络: 本文思路: 一、我认为学习卷积神经网络必须知道的几个概念: 1、卷积过程:   我们经常说卷积神经网络卷积神经网络,到底什么才是卷积?网络层卷积过程到底怎么实现?我们在这里借鉴了另一位博客大牛的动态图来给大

Errors_In_Life的博客 16万+

力扣贪心 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。 示...

xiaozheng的博客 480

点云配准实战:用DGCNN+Transformer+SVD搞定3D模型对齐(附PyTorch代码)

本文详细介绍了基于深度学习的点云配准实战方法,重点解析了Deep Closest Point (DCP)模型。该模型融合了DGCNN、Transformer和可微分SVD三大核心模块,能够端到端地预测点云间的刚性变换,有效克服传统ICP算法对初始位置敏感、易陷入局部最优的缺点。文章提供了完整的PyTorch代码实现、ModelNet40数据集处理、训练策略及显存优化技巧,旨在帮助开发者在机器人、自动驾驶等领域实现精准的3D模型对齐。

weixin_29061041的博客 153

国科大人工智能原理与算法-2024-第一次作业-雷震老师

1. 反射行动(比如从热炉子上缩回你的手)是理性的吗?它们是智能的吗? 2. 以下的计算机系统在何种程度上是人工智能的实例: - 超市条码扫描器 - 网络搜索引擎 - 语音激活的电话菜单 - 对网络状态动态响应的网络路由算法 3. 为什么进化会倾向于导致行为合理的系统?设计这样的系统想达到的目标是什么?

MatsumotoChrikk 2926

1326. Minimum Number of Taps to Open to Water a Garden

There is a one-dimensional garden on the x-axis. The garden starts at the point0and ends at the pointn. (i.e The length of the garden isn). There aren + 1taps locatedat points[0, 1, ..., n]i...

Do not mess it up 519

【PCIe 总线及设备入门学习专栏 1.3 -- PCIe 基础知识 lane和link介绍】

PCIe RC(Root Complex)是PCIe树的根节点,一个RC 可以包括多个 RP(Root Port),例如一个16 条 lane的PCIe RC 可以包括4个RP(4个x4的),或者8个RP(8个x2的)等等。在该模式下,数据传送由CPU执行I/O端口指令来按照字节或更大的数据单位来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。国内应该有公司做出相应的phy芯片(例如芯动科技、牛芯半导体),毕竟常见的pcie 3.0才8 Gbps的速率,最新的6.0才64Gbps。

CodingCos的博客 2104

LeetCode 1326. Minimum Number of Taps to Open to Water a Garden 动态规划 离散化 贪心

There is a one-dimensional garden on the x-axis. The garden starts at the point0and ends at the pointn. (i.e The length of the garden isn). There aren + 1taps locatedat points[0, 1, ..., n]in the garden. Given an integernand an integer arrayra...

taoqick的专栏 479

Spring AI 实战:第二章、Spring AI提示词之玩转AI占卜的艺术

引言:程序员的神秘学探索引言:程序员的神秘学探索“下个迭代能按时发布吗?“这次晋升机会有多大?“我写的代码为什么总在半夜出bug?作为一名开发者是否也曾被这些略带玄学问题困扰?那让我们用Spring AI和提示词工程打造一个专属于程序员的"赛博占卜师",让大师来为你占卜一卦吧~一、提示词工程 - 与AI对话的艺术1.1 提示词工程是什么类比一下,AI就像一位刚从名校毕业的高材生它知识渊博但缺乏经验能解决复杂问题但需要明确指引有时会"过度脑补"(专业术语叫"幻觉")

liaokailin的专栏 1849

无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程

当您遇到类似于"无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程"的错误消息时,请按照上述步骤来解决问题。当您尝试加载文件C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1时,可能会遇到类似于"无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程"的错误消息。请注意,更改执行策略可能会带来一些安全风险。

PixelInk的博客 1919

LeetCode-1326. Minimum Number of Taps to Open to Water a Garden

There is a one-dimensional garden on the x-axis. The garden starts at the point0and ends at the pointn. (i.e The length of the garden isn). There aren + 1taps locatedat points[0, 1, ..., n]i...

reigns的博客 762

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Leetcode】1326. Minimum Number of Taps to Open to Water a Garden

题目地址: https://leetcode.com/problems/minimum-number-of-taps-to-open-to-water-a-garden/ 在一个数轴上,给定一个正整数nnn,和一个长n+1n+1n+1的非负数组AAA,在0,1,...,n0,1,...,n0,1,...,n上各有一个水龙头,A[i]A[i]A[i]表示位于iii的水龙头能浇灌的半径,即可以浇灌[i−A[i],i+A[i]][i-A[i],i+A[i]][i−A[i],i+A[i]]。问最少开多少个水龙头可以

数学、算法爱好者的博客 491

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Leetcode1326 Minimum Number of Taps to Open to Water a Garden题解(cpp)

Leetcode1326 Minimum Number of Taps to Open to Water a Garden 原题 链接:https://leetcode.com/problems/minimum-number-of-taps-to-open-to-water-a-garden/ 大意: 有大小[0,n]大小的花园,每个点上都可以放水龙头(一共可以放n+1个水龙头) 给定每个水龙头...

weixin_43573862的博客 234

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

leetcode - 1326. Minimum Number of Taps to Open to Water a Garden

leetcode - 1326

sinat_41679123的博客 349

LeetCode 1326. Minimum Number of Taps to Open to Water a Garden【贪心,桶排序】

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。为了方便在PC上运行调试、分享代码文件,我还建立了相关的。

memcpy0的博客 569

leetcode 困难题 1326. Minimum Number of Taps to Open to Water a Garden 灌溉花园的最少水龙头数目

Problem:首先算出每个tap灌溉的区间,长度=0的过滤掉,然后对相同的区间去重,然后排序的,first从小到大排序,若first相同则second从大到小排序然后去掉完全被包括起来的子区间,标记被去掉的status[i]=true,用另外的数组保存保留下来的区间。

邹九的个人博客 51

力扣 每日一题 1326. 灌溉花园的最少水龙头数目【难度:困难,rating: 1885】(动态规划)

得到所有区间,按左端点L、右端点R进行排序。然后遍历这些区间覆盖的每个点i,保证L

nefu_ljw的博客 336

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

LeetCode Hot 100 链表专题 三· 3 题(Java)

收录题目:2. 两数相加、19. 删除链表的倒数第 N 个结点、24. 两两交换链表中的节点。 统一结构:① 题目分析与解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结。 贯穿三题的两条主线:虚拟头结点 dummy(统一处理头结点被修改的场景)与 指针修改顺序(避免断链、丢引用)。

2401_88612756的博客 481

LeetCode 每日一题 2026/11/2-2026/11/8

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 174

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等) 题目描述: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: - s = s1 + s2 + ... + sn - t = t1 + t2 + ... + tm - |n - m| <= 1 - 交错 是 s1 + t

huayimenghan的博客 198

LeetCode 1861. 旋转盒子|Go 双指针解法

j >= 0,如果写成j>0,会漏掉第 0 列,最左侧石头处理失败旋转矩阵行列互换:原 m 行 n 列 → 结果 n 行 m 列,make 数组长度不要写反旋转公式m-1-i:是原总行数 m,不是 n!很容易写成n-1-i区分:本题和轮转数组(189)分组循环不一样!189:所有元素固定移动 k 步,需要 gcd 分组1861:障碍物分割成多个独立段,石头向段末尾挤,用双指针更合适。

2503_92676540的博客 175

Hash表:两数之和、字母异位词分组、最长连续序列 [力扣 Hot100]

三道高频哈希表应用题:两数之和(利用HashMap快速查找补数)、字母异位词分组(排序后作为键分组)、最长连续序列(通过HashSet去重并仅从序列起点扩展)。核心思想均为借助哈希结构优化查找效率,避免重复计算。同时提及双指针等其他解法思路,体现算法设计中“空间换时间”的典型策略。

2403_87560480的博客 195

LeetCode 3926. 统计有效单词的出现次数【分组循环】

核心思想:用分组循环,一趟遍历字符串,把一个个单词切出来,丢进哈希表统计频次。,先把所有片段拼接成完整文本字符串。,依次返回每个单词在文本里的出现次数。难点:内层循环的判断条件,区分。

2503_92676540的博客 166

力扣第526场周赛心得理解

思路:因为题目要求尽可能求出最小的最大值,而满足要求最小公约数为2,作为题目要求最小的最大值,先去求出它的最大公约数再通过value判断最左边是否大于0,以及value本身是否大于0,而index的位置只能为中间或者最右边,所以最后输出只能是value本身或者在这个基础上加相隔相应距离次数的结果。两个整数,是指将第二个整数的所有十进制数位拼接在第一个整数的所有十进制数位之后。如果不存在这样的数组,返回 -1。4097. 合并整数后的最小值。返回所有合并后得到的整数中的。合并,依此类推,直到将。

目前主攻编程,目标是把屏幕上的红波浪线变成流畅运行的程序♪(^∀^●)ノシ 198
上一篇: leetcode 2483. Minimum Penalty for a Shop(商店的最少代价)
下一篇: FasterNet(PConv)paper笔记(CVPR2023)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值