文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个下标从 0 开始的字符串 street 。street 中每个字符要么是表示房屋的 ‘H’ ,要么是表示空位的 ‘.’ 。

你可以在 空位 放置水桶,从相邻的房屋收集雨水。
位置在 i - 1 或者 i + 1 的水桶可以收集位置为 i 处房屋的雨水。
一个水桶如果相邻两个位置都有房屋,那么它可以收集 两个 房屋的雨水。

在确保 每个 房屋旁边都 至少 有一个水桶的前提下,请你返回需要的 最少 水桶数。
如果无解请返回 -1 。

示例 1:
输入:street = "H..H"
输出:2
解释:
我们可以在下标为 1 和 2 处放水桶。
"H..H" -> "HBBH"('B' 表示放置水桶)。
下标为 0 处的房屋右边有水桶,下标为 3 处的房屋左边有水桶。
所以每个房屋旁边都至少有一个水桶收集雨水。示例 2:
输入:street = ".H.H."
输出:1
解释:
我们可以在下标为 2 处放置一个水桶。
".H.H." -> ".HBH."('B' 表示放置水桶)。
下标为 1 处的房屋右边有水桶,下标为 3 处的房屋左边有水桶。
所以每个房屋旁边都至少有一个水桶收集雨水。示例 3:
输入:street = ".HHH."
输出:-1
解释:
没有空位可以放置水桶收集下标为 2 处的雨水。
所以没有办法收集所有房屋的雨水。示例 4:
输入:street = "H"
输出:-1
解释:
没有空位放置水桶。
所以没有办法收集所有房屋的雨水。示例 5:
输入:street = "."
输出:0
解释:
没有房屋需要收集雨水。
所以需要 0 个水桶。提示:
1 <= street.length <= 10^5
street[i] 要么是 'H' ,要么是 '.' 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-number-of-buckets-required-to-collect-rainwater-from-houses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 不是最优解,也是贪心的思路
  • 先把. 左右都有的位置放上,然后再处理单个的
class Solution {public:int minimumBuckets(string street) {int n = street.size();vector<int> ct(n, 0); // 记录 . 左右有没有满足条件的 H 的数量for(int i = 0; i < n; ++i){if(street[i]=='H'){if(i-1>=0 && street[i-1]=='.')ct[i-1]++;if(i+1<n && street[i+1]=='.')ct[i+1]++;}}vector<bool> have(n, false);int ans = 0;for(int i = 0; i < n; ++i){if(ct[i] == 2) // 先处理2个的情况{have[i-1] = have[i+1] = true;if(i-2>=0 && street[i-2]=='.')ct[i-2]--;if(i+2<n && street[i+2]=='.')ct[i+2]--;ct[i] = 0;ans++;}}for(int i = 0; i < n; ++i){if(ct[i] == 1){ans++;if(i-1>=0 && street[i-1]=='H') {have[i-1]=true;}if(i+1<n && street[i+1]=='H') {have[i+1]=true;if(i+2<n && street[i+2]=='.')ct[i+2]--;//记得更新后面的计数}}}for(int i = 0; i < n; ++i){if(street[i]=='H' && have[i]==false) return -1;}return ans;}
};

28 ms 14.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 2086. 从房屋收集雨水需要的最少水桶数(贪心)相关推荐

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

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

  2. 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数

    文章目录 题目 思路 AC代码 后记 题目 从房屋收集雨水需要的最少水桶数 思路 思路是贪心,因为我们需要从左向右找寻所有的水桶数,所以我们对于每一个房屋都优先判断右边是否能放水桶,右边不能放就看左边 ...

  3. leetcode 从房屋收集雨水需要的最少水桶数

    给你一个下标从 0 开始的字符串 street .street 中每个字符要么是表示房屋的 'H' ,要么是表示空位的 '.' . 你可以在 空位 放置水桶,从相邻的房屋收集雨水.位置在 i - 1  ...

  4. Leetcode2086. 从房屋收集雨水需要的最少水桶数(medium)

    目录 1. 题目描述 2. 方法一:动态规划 2.1 思路 2.2 代码实现 3. 方法二 3.1 思路 3.2 代码实现 1. 题目描述 给你一个下标从 0 开始的字符串 street .stree ...

  5. leetcode5923.从房屋收集雨水需要的最少水桶数(中等,周赛)

    自己的思路:贪心 class Solution {public:int minimumBuckets(string street) {int n = street.size();int i = 0, ...

  6. LeetCode 1785. 构成特定和需要添加的最少元素(贪心)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums ,和两个整数 limit 与 goal . 数组 nums 有一条重要属性:abs(nums[i]) <= limit ...

  7. LeetCode 42 Trapping Rain Water 收集雨水

    LeetCode 42 Trapping Rain Water 收集雨水 Given n non-negative integers representing an elevation map whe ...

  8. Leetcode 407. Trapping Rain Water II 收集雨水2 解题报告

    1 解题思想 我看了下题目,发现比预想中的简单,加之我比较烂,所以其实我还是没做,只是看懂了上回贴的代码,然后做了一下注释,现在我来讲下题目. 首先请看下上一题,上一题是2D的这题是3D的: Leet ...

  9. 【栈】python、单调栈解决收集雨水问题、力扣42题

    以下是leetcode 42原题: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 示例 1: 输入:height = [0,1,0,2,1,0,1 ...

最新文章

  1. NR 5G 运营发布
  2. php图片滑动代码,jQuery如何实现图片滑动效果
  3. [译] D3.js 嵌套选择集 (Nested Selection)
  4. Python 实现斐波那契数列
  5. 低代码发展专访系列之二:两三年内会出现“现象级”低代码产品吗?
  6. android 引用非 android 工程,Unity3D调用android方法(非插件方式)
  7. dismiss和remove_remove的近义词辨析
  8. 【kafka】Kafka 幂等 Producer
  9. 我的世界联机侠服务器文件夹,我的世界联机侠空岛服务器怎么建 | 手游网游页游攻略大全...
  10. tablepc是什么平板电脑_什么是TABLET PC,TABLET PC有什么功能呢?
  11. Protobuf报错CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):
  12. CTE递归 MAXRECURSION 遇到的问题
  13. python 公主连接_ss
  14. oracle数据库修改计算机名,oracle 批改计算机名
  15. 尾递归优化 - 尾递归优化
  16. node.js基于微信小程序的校园失物招领毕业设计源码072343
  17. BIN文件转dfu文件 进行刷机 问题
  18. apa引用要在文中吗_Reference 居然还有那么多讲究?引用不好就挂了!
  19. 植发搞笑图片_植发失败案例实录!历时几个月却迎来头发尽毁,后果太可怕了...
  20. 【机械臂算法】机械臂动力学参数辨识仿真

热门文章

  1. git 拉取远程其他分支代码_【记录】git 拉取远程分支代码,同步到另一个git上...
  2. 博客目录(python相关)
  3. Python 第三方模块之 selenium - 模拟操作 Chrome 浏览器
  4. linux找link原路径,readlink命令找出符号链接所指向的位置
  5. python对excel表统计视频教程_Python实现对excel文件列表值进行统计的方法
  6. linux 最强shell,最牛B 的 Linux Shell 命令(一)
  7. Makefile赋值符号的使用——= := ?= +=
  8. 用Python自动生成NBA巨星生涯数据曲线
  9. SpringBoot整合Mybatis-plus实现增删查改
  10. ios开发网络篇—HTTP协议 - 转