当前位置: 首页 > news >正文

LeetCode_动态规划_困难_1326.灌溉花园的最少水龙头数目

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

在 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

2.思路

(1)动态规划
思路参考本题官方题解。

3.代码实现(Java)

//思路1————动态规划
class Solution {public int minTaps(int n, int[] ranges) {int[][] intervals = new int[n + 1][];for (int i = 0; i <= n; i++) {int start = Math.max(0, i - ranges[i]);int end = Math.min(n, i + ranges[i]);intervals[i] = new int[]{start, end};}/*此时题目转换为:从 [start0, end0]、[start1, end1]、...、[startn, endn] 中选出最少数目的区间,使得它们可以覆盖 [0, n]*///将所有区间按照起点进行升序排序Arrays.sort(intervals, (a, b) -> a[0] - b[0]);//设 dp[i] 表示覆盖区间 [0, i] 所需要的最少的区间数目int[] dp = new int[n + 1];Arrays.fill(dp, Integer.MAX_VALUE);dp[0] = 0;for (int[] interval : intervals) {int start = interval[0];int end = interval[1];if (dp[start] == Integer.MAX_VALUE) {return -1;}for (int j = start; j <= end; j++) {dp[j] = Math.min(dp[j], dp[start] + 1);}}return dp[n];}
}
http://www.lryc.cn/news/15512.html

相关文章:

  • mac tcpdump学习
  • 【跟我一起读《视觉惯性SLAM理论与源码解析》】第二章 编程及编译工具
  • 广东望京卡牌科技有限公司,2023年团建活动圆满举行
  • ts语法如何在Vue3中运用?
  • RK3566添加湿度传感器以及浅析hal层
  • 看了这份Java高级笔试宝典覆盖近3年Java笔试中98%高频知识点,反打面试官
  • 从0到1搭建大数据平台之监控
  • 采购评标管理过程是怎样的?有哪些评标标准?
  • 《Vue+Spring Boot前后端分离开发实战》专著累计发行上万册
  • 类与类之间的关系有哪几种?
  • LeetCode 606.根据二叉树创建字符串,102.二叉树的层序遍历和牛客 二叉搜索树与双向链表
  • 02-18 周六 图解机器学习之SMV 第五章5-2
  • Spring Boot系列--创建第一个Spring Boot项目
  • 手把手教你用React Hook和TypeScript从零实现虚拟滚动列表组件
  • 界面控件DevExpress WPF Pivot Grid——拥有强大多维数据分析能力!
  • python字典及基础操作
  • Windows Server 2008 R2安装onlyoffice【docker】
  • JVM学习笔记六:运行时数据区之堆
  • usb闪存驱动器数据恢复该怎么进行?3个方法总结
  • DAX 微信 markdown 编辑器
  • 湖南中创教育为学员提供方便快速的退费服务
  • Java 给视频添加背景音乐 | Java工具
  • 【JUC2022】第二章 多线程锁
  • 快学会这个技能-.NET API拦截技法
  • stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
  • Hystrix资源隔离
  • 字符串(一)-- LeetCode[3] 无重复字符的最长子串
  • Qt中修改界面类的类名时需要注意的几个修改点
  • 【Spring6】| Spring启示录、Spring概述
  • react源码中的fiber架构