LeetCode 2086. 从房屋收集雨水需要的最少水桶数(贪心)
文章目录
- 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. 从房屋收集雨水需要的最少水桶数(贪心)相关推荐
- LeetCode 2086. 从房屋收集雨水需要的最少水桶数 -- 动态规划
从房屋收集雨水需要的最少水桶数 中等 26 相关企业 给你一个下标从 0 开始的字符串 street .street 中每个字符要么是表示房屋的 'H' ,要么是表示空位的 '.' . 你可以在 空位 ...
- 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
文章目录 题目 思路 AC代码 后记 题目 从房屋收集雨水需要的最少水桶数 思路 思路是贪心,因为我们需要从左向右找寻所有的水桶数,所以我们对于每一个房屋都优先判断右边是否能放水桶,右边不能放就看左边 ...
- leetcode 从房屋收集雨水需要的最少水桶数
给你一个下标从 0 开始的字符串 street .street 中每个字符要么是表示房屋的 'H' ,要么是表示空位的 '.' . 你可以在 空位 放置水桶,从相邻的房屋收集雨水.位置在 i - 1 ...
- Leetcode2086. 从房屋收集雨水需要的最少水桶数(medium)
目录 1. 题目描述 2. 方法一:动态规划 2.1 思路 2.2 代码实现 3. 方法二 3.1 思路 3.2 代码实现 1. 题目描述 给你一个下标从 0 开始的字符串 street .stree ...
- leetcode5923.从房屋收集雨水需要的最少水桶数(中等,周赛)
自己的思路:贪心 class Solution {public:int minimumBuckets(string street) {int n = street.size();int i = 0, ...
- LeetCode 1785. 构成特定和需要添加的最少元素(贪心)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums ,和两个整数 limit 与 goal . 数组 nums 有一条重要属性:abs(nums[i]) <= limit ...
- LeetCode 42 Trapping Rain Water 收集雨水
LeetCode 42 Trapping Rain Water 收集雨水 Given n non-negative integers representing an elevation map whe ...
- Leetcode 407. Trapping Rain Water II 收集雨水2 解题报告
1 解题思想 我看了下题目,发现比预想中的简单,加之我比较烂,所以其实我还是没做,只是看懂了上回贴的代码,然后做了一下注释,现在我来讲下题目. 首先请看下上一题,上一题是2D的这题是3D的: Leet ...
- 【栈】python、单调栈解决收集雨水问题、力扣42题
以下是leetcode 42原题: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 示例 1: 输入:height = [0,1,0,2,1,0,1 ...
最新文章
- NR 5G 运营发布
- php图片滑动代码,jQuery如何实现图片滑动效果
- [译] D3.js 嵌套选择集 (Nested Selection)
- Python 实现斐波那契数列
- 低代码发展专访系列之二:两三年内会出现“现象级”低代码产品吗?
- android 引用非 android 工程,Unity3D调用android方法(非插件方式)
- dismiss和remove_remove的近义词辨析
- 【kafka】Kafka 幂等 Producer
- 我的世界联机侠服务器文件夹,我的世界联机侠空岛服务器怎么建 | 手游网游页游攻略大全...
- tablepc是什么平板电脑_什么是TABLET PC,TABLET PC有什么功能呢?
- Protobuf报错CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):
- CTE递归 MAXRECURSION 遇到的问题
- python 公主连接_ss
- oracle数据库修改计算机名,oracle 批改计算机名
- 尾递归优化 - 尾递归优化
- node.js基于微信小程序的校园失物招领毕业设计源码072343
- BIN文件转dfu文件 进行刷机 问题
- apa引用要在文中吗_Reference 居然还有那么多讲究?引用不好就挂了!
- 植发搞笑图片_植发失败案例实录!历时几个月却迎来头发尽毁,后果太可怕了...
- 【机械臂算法】机械臂动力学参数辨识仿真
热门文章
- git 拉取远程其他分支代码_【记录】git 拉取远程分支代码,同步到另一个git上...
- 博客目录(python相关)
- Python 第三方模块之 selenium - 模拟操作 Chrome 浏览器
- linux找link原路径,readlink命令找出符号链接所指向的位置
- python对excel表统计视频教程_Python实现对excel文件列表值进行统计的方法
- linux 最强shell,最牛B 的 Linux Shell 命令(一)
- Makefile赋值符号的使用——= := ?= +=
- 用Python自动生成NBA巨星生涯数据曲线
- SpringBoot整合Mybatis-plus实现增删查改
- ios开发网络篇—HTTP协议 - 转