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 <= 1e4
  • ranges.length == n + 1
  • 0 <= ranges[i] <= 100

做题结果

失败,完全没思路,因为一般这种题都是枚举的,这100不能用位运算,就很迷茫

方法:动态规划

1. 确定左右边界,在右边界的位置标记左边界,选择尽量靠左的边界

2. 链接上一段,在本段范围内,选择上一段的基础上+1

3. 注意不存在的右端点直接跳过

class Solution {public int minTaps(int n, int[] ranges) {int[] prev = new int[n+2];Arrays.fill(prev,n);for(int i = 0; i < ranges.length; i++){int left = Math.max(0,i-ranges[i]);int right = Math.min(n,i+ranges[i]);prev[right]=Math.min(left,prev[right]);}// System.out.println(Arrays.toString(prev));int []dp = new int[n+1];Arrays.fill(dp,Integer.MAX_VALUE/2);dp[0]=0;for(int i = 1; i <= n; i++){if(prev[i]==n) continue;for(int j = prev[i];j<i;j++){dp[i] = Math.min(dp[i],dp[j]+1);}}return dp[n]<Integer.MAX_VALUE/2?dp[n]:-1;}
}

1326. 灌溉花园的最少水龙头数目 动态规划相关推荐

  1. 【算法leetcode】1557. 可以到达所有点的最少点数目(rust和go我都要)

    文章目录 1557. 可以到达所有点的最少点数目: 样例 1: 样例 2: 提示: 分析 题解 rust go typescript python c c++ java 原题传送门:https://l ...

  2. 【LeetCode】Day119-找到小镇的法官可达所有点的最少点数目

    题目1.找到小镇的法官 997. 找到小镇的法官[简单] 题解 还挺有意思的一道题,像狼人杀一样哈哈,模拟的是图的入度和出度 class Solution {public int findJudge( ...

  3. 火车最少钢轨数目问题

    -个博物馆收藏了不同的火车,同地区的火车需要的铁路宽度是不一样的.现在这个博物馆为了陈列火车需要一些铁路. 每条铁路可以看作是由两根平行钢轨组成 的,只要把两条钢轨的距离摆放合适了,就可以放置对应的火 ...

  4. hdu 1257最少拦截系统 动态规划

    最少拦截系统 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Problem Desc ...

  5. LeetCode 2086. 从房屋收集雨水需要的最少水桶数 -- 动态规划

    从房屋收集雨水需要的最少水桶数 中等 26 相关企业 给你一个下标从 0 开始的字符串 street .street 中每个字符要么是表示房屋的 'H' ,要么是表示空位的 '.' . 你可以在 空位 ...

  6. 力扣题目——1557. 可以到达所有点的最少点数目

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给你一个有向无环图, n 个节点编号为 0 到 n-1 ,以及一个边数组 e ...

  7. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  8. 贪心(Greedy Algorithm)

    贪心(Greedy Algorithm) 贪心 44.通配符匹配 45.跳跃游戏 II 55.跳跃游戏 122.买卖股票的最佳时机II 134.加油站 135.分发糖果 179.最大数 277.搜寻名 ...

  9. LeetCode 700题 题解答案集合 Python

    2019.5.12更新至题号796,目前共有265题. 2019.5.26更新至题号72, 目前共有347题. 2019.6.16更新至题号70,目前共有382题. 2019.7.7更新至题号5120 ...

最新文章

  1. Paddle预训练模型应用工具PaddleHub
  2. LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理
  3. 减免租金?也要体谅业主难处哟
  4. CALayer 知识:创建带阴影效果的圆角图片图层和创建自定义绘画内容图层
  5. Jquery--遮罩弹窗特效
  6. SDN控制器部署相关工作—Vecloud
  7. 在TABLE CONTROL 输入完一行记录,按回车的时候光标自动移动到下一行
  8. 方立勋_30天掌握JavaWeb_response
  9. LeetCode 1136. 平行课程(拓扑排序)
  10. java 自动类型_java类型自动转换
  11. jquery设置表单元素只读_jQuery为文本框添加只读属性readOnly
  12. VisionPro软件笔记
  13. 嵌入式远程岗位、兼职、接单、众包平台
  14. 一篇文章入门Spring
  15. [VCS]filelist.list的做法
  16. 榕树说技术支持(Rong Zhiyun technical support)
  17. SM2RAIN-ASCAT全球规模降雨产品数据集(2007年-2020年6月)
  18. 【LeetCode】417. Pacific Atlantic Water Flow 太平洋大西洋水流问题
  19. clahe(限制对比度自适应直方图均衡化)
  20. ldr,str指令作用,详解

热门文章

  1. 软件测试工作内容和职责有哪些
  2. PCB学习笔记——使用嘉立创在线绘制原理图与PCB
  3. element 富文本插件封装
  4. 滚雪球学 Python 之闭包操作,本系列第 8 篇文章
  5. 多个指针指向同一个地址
  6. OC直升机公司否认对科比坠机事故负有任何责任
  7. 数据库自动生成编号SQL server
  8. 爆肝一个月,从博物馆到自然景区,整合了100个值得逛的3D游园景点,让你足不出户玩转中秋!
  9. 如何解决电脑不能上网
  10. 新王降临——英特尔13代酷睿发布