有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢? 如下图,可以表示为数组[0,1,0,2,1,0,1,3,2,1,2,1],返

台阶积水问题算法思考 台阶积水算法探讨 关于台阶积水算法思路的梳理。 问题 有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢? 如下图,可以表示为数组[0,1,0,2,1,0,1,3,2,1,2,1],返回积水量6。 思路梳理 考虑积水量,可以分析每一级台阶会有多少积水。 首先开头和结尾的台阶不会有积水。中间部分的台阶存在积水,那么它的两端肯定有比... 阅读详情

这是一道今日头条的面试题

"""
有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢?
如下图,可以表示为数组[0,1,0,2,1,0,1,3,2,1,2,1],返回积水量6。

"""

分析:(手绘,难看别嫌弃)

方法一:(两次遍历)

先在这个数组中找到最大值,然后从左右两边遍历。以左边为例,只要当前的数字比下一个数字大,那么这个数字的右边就可以存水,按照这个思路去分析就可以了,右边的也是一样的道理。代码如下:

def water_volume(arr_list):
    """
    返回积水量
    :param arr_list: 台阶数组
    :return: 返回积水量
    """
    arr_length = len(arr_list)  # 数组的长度
    arr_max = 0  # 定义数组的最大值
    arr_max_pos = 0  # 定义数组最大值的下标

    for i in range(0, arr_length):
        if arr_max < arr_list[i]:
            arr_max = arr_list[i]
            arr_max_pos = i

    arr_max_left = 0  # 定义从最左边开始遍历的极大值
    arr_max_right = 0  # 定义从最右边开始遍历的极大值
    volumes = 0  # 定义容水量

    for j in range(0, arr_max_pos):
        if arr_max_left < arr_list[j]:
            arr_max_left = arr_list[j]
        else:
            volumes += (arr_max_left - arr_list[j])

    for k in range(arr_length - 1, arr_max_pos, -1):
        if arr_max_right < arr_list[k]:
            arr_max_right = arr_list[k]
        else:
            volumes += (arr_max_right - arr_list[k])

    return volumes


arr = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 6]
res = water_volume(arr)
print(res)

方法二:(一次遍历)

整个的原理和方法一是一样的,就是从左右两边同时遍历,这样只用一次就可以实现了。代码如下:

def water_volume(arr_list):
    """
    返回积水量
    :param arr_list: 台阶数组
    :return: 返回积水量
    """
    arr_length = len(arr_list)  # 数组的长度
    arr_left_pos = 0  # 从左开始遍历的指针的下标
    arr_right_pos = arr_length - 1  # 从右开始遍历的指针的下标
    arr_max_left = arr_list[arr_left_pos]  # 从左开始遍历的过程中的极大值
    arr_max_right = arr_list[arr_right_pos]  # 从右开始遍历的过程中的极大值
    volumes = 0  # 保存容积的变量

    while arr_left_pos < arr_right_pos:
        if arr_max_left < arr_max_right:
            arr_left_pos += 1
            if arr_list[arr_left_pos] >= arr_max_left:
                arr_max_left = arr_list[arr_left_pos]
            else:
                volumes += (arr_max_left - arr_list[arr_left_pos])
        else:
            arr_right_pos -= 1
            # tmp_right = arr_list[arr_right_pos]

            if arr_list[arr_right_pos] >= arr_max_right:
                arr_max_right = arr_list[arr_right_pos]
            else:
                volumes += (arr_max_right - arr_list[arr_right_pos])
    return volumes


arr = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]
res = water_volume(arr)
print(res)

 

CMOS传输门(互补开关)实战指南 | 设计优化 + 常见问题解析 本文深入解析CMOS传输门(互补开关)的设计优化与常见问题,涵盖导通特性、版图设计、高频应用及混合信号设计等关键领域。通过实测数据和优化技巧,帮助工程师解决衬底连接、信号完整性等实际问题,提升数字和模拟混合信号设计的效率与可靠性。 阅读详情

相关推荐

【CAN通讯系列18】- NM在干什么?休眠唤醒

同时针对不同休眠或唤醒场景,网管报文的userdata有所区别,如何做到场景与网管报文内容一一映射,通常会定义另一帧报文,用来表明当前是哪个或哪几个唤醒条件或休眠条件满足。又或者如果用户发现汽车电量不充足了,那么会有充电需求,插枪充电,这时如果插上慢充枪,那么OBC会先被唤醒,识别出插枪行为及其慢充枪的连接状态,然后OBC唤醒BMS和其他相关的控制器进行充电。也就是说,通过对一个又一个整车功能和应用场景的详细分析,最终能够汇总出整车所有的休眠唤醒场景需求,通常会用一个表格来管理,俗称休眠唤醒表。

menghuyouyou的博客 1169

有一组不同高度的台阶,由一个整型数组表示,数组中每个数是台阶的高度,当开始下雨了(水足够多) 台阶之间的水坑会积多少水

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { int a[] = { 0,1,0,2,1,0,1,3,2,1,2,1 }; int sum = 0, temp; int max = sizeof(a) / sizeof(a[0]); for (int i = 0;i < m...

crazybears的专栏 979

带你一分钟了解电感与磁珠的区别

在电路设计中会经常使用到电感和磁珠,虽然在电路中的作用有所不同,但它们都属于磁性电子元器件,本文简单介绍下电感和磁珠的区别电感和磁珠电感和磁珠的结构主要由磁性材料金属线圈和外壳组成,具体结构如下图所示:电感磁珠结构图电感其实是金属线圈缠绕在磁芯上,而磁珠是在内部折叠后外围包裹着铁氧体磁性材料。电感器(Inductor)又称扼流器、电抗器、动态电抗器是储能器件,能够把电能转化为磁能而存储起来的元件。磁珠则是能量转换(消耗)器件,将流过他的高频信号以热能的形式消耗掉。

攻城狮鹏哥 1410

有一组不同高度的台阶,用一个整数数组表示,数组中每个数是台阶的高度,雨后(雨水足够多)台阶之间的水坑会积水多少呢?

如数组int height[] = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1}; 对应积水如下图: 图转自:https://blog.youkuaiyun.com/Thomas0713/article/details/83051990 如果要形成积水,则积水两旁的台阶上高于积水区的。而积水体积计算则是最低台阶与两边台阶最低的差。 代码: #include &lt...

u012389124的专栏 1203

qt5.14.2+vs2019配置msvc2017编译器

qt5.14.2+vs2019配置msvc2017编译器 在使用qt编译程序时此前一直使用的是自带的MinGW 32-bit和64-bit,现在想使用msvc编译器。本次使用的是qt5.14.2,vs2019,需要配置msvc2017的32-bit和64-bit编译器。 1、首先安装好qt5.14.2和vs2019,其次在visual studio installer选择修改,然后选择msvc2017对应的组件,本次安装的是这两个 2、打开qt creator的工具–选项–kits–编译器,选择Manu

bangtanhui的博客 1万+

YOLOv11改进缝合注意力 | 深度优化的BiFormer模型-结合BiLevel Routing Attention与深度可分离卷积的创新应用(附代码)

YOLO(You Only Look Once)系列目标检测算法一直以来都是计算机视觉领域的热门选择。随着YOLOv11的发布,它在许多实际应用场景中取得了显著的性能提升。然而,面对日益复杂的目标检测任务,单纯依赖卷积神经网络(CNN)在某些情况下已经显得力不从心,特别是在处理小尺度、密集目标以及遮挡目标时,卷积操作的局部性限制了模型的表达能力。

一键难忘的博客 716

不同高度墙的盛水问题两种算法C++实现

题目在伯乐在线中看到的,据说是twitter面试时的题目,感觉蛮有意思的。于是就将两种算法都用C++实现了,就当练练手吧。 “在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]”        “假如开始下雨了,那么墙之间的水坑能够装多少水呢?” “以1×1的方块为单位计算

3686

深水区探秘:小红书App x-s参数逆向与高并发爬虫实战(2026版)

在移动互联网的碎片化时代,小红书凭借其“社区+电商”的独特模式,积累了超过3亿月活用户。其内容生态覆盖了从美妆、穿搭到旅行、数码等几乎所有垂直领域。对于数据分析师、市场研究员以及AI算法工程师而言,小红书平台蕴含的价值是巨大的——无论是热门趋势洞察、KOL画像分析,还是多模态图文数据的采集。然而,想要高效、稳定地获取小红书App的公开数据,却并非易事。与Web端相比,小红书App的防护体系堪称“铜墙铁壁”。其核心的反爬机制建立在动态混淆的加密参数之上,尤其是请求头中的X-SX-T以及X-S-Common。

2201_76125261的博客 266

【题目】:输入一个非负整形数组,其中每个数代表紧挨着的宽为1的墙的高度,输出这些墙之间能积水的体积。函数接口为 int Volume(int * height,int n),要求只能遍历一 遍数组,且

【题目】:输入一个非负整形数组,其中每个数代表紧挨着的宽为1的墙的高度,输出这些墙之间能积水的体积。函数接口为 int Volume(int * height,int n),要求只能遍历一 遍数组,且空间复杂度为O(1)。【示例】:input:([1,0,2,1,0,1,3,2,1,2,1],11)(如下图所示),output:6。  能实现计算水滴数,但是不是遍历一遍数组和空间复杂

zhengruli的博客 623

定位教程0---定位初介绍

定位教程0---定位算子介绍

Quintin 1万+

TC3XX - MCAL知识点(十一):WDG EB-tresos配置说明与代码浅析

在AUTOSAR中,看门狗栈实现了三种监控机制:实时监控:用于周期软件的定时监控期限监督:针对非周期软件逻辑监督:用于监督执行顺序的正确性看门狗(WDG)驱动实现AUTOSAR(4.2.2)中规定的看门狗SWS,提供初始化、改变操作模式和设置触发条件(超时)等服务,供看门狗硬件(WDT)用户使用。WDG驱动的用户包括:模式管理模块(用于初始化),WdgM通过Wdglf设置触发条件和驱动运行模式设置。WdgM实施上述监督机制。AUTOSAR扩展触发概念,以支持窗口看门狗模式。

梦想技术家 3603

有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度。

如题 有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度。当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢?如下图,可以表示为数组[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] 积水情况为: 然后,整代码: class Test { static int[] a = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1}; // static int[] a = {1, 0, 2, 0, 1, 2}; stat

qq_41109078的博客 453

用 ABAP 驾驭 OAuth 2.0:从 Authorization Code 到 SAML Bearer 的全栈落地指南

ABAP平台OAuth 2.0客户端开发实践 本文为SAP开发者详细解析ABAP平台内置OAuth 2.0客户端的使用方法,涵盖四种授权流的最佳实践: 授权流选择: Authorization Code:适用于用户交互场景 SAML 2.0 Bearer:适合已有SAML体系的企业 Client Credentials:系统间通信 Password Credentials:过渡方案(不推荐) 配置流程: 通过SE80定义Client Profile 使用SOAUTH2_CLIENT/OA2C_CONFIG配

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 309

有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢?

有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢?如下图,可以表示为数组[0,1,0,2,1,0,1,3,2,1,2,1],返回积水量6. 方法一:(两次遍历) 先在这个数组中找到最大值,然后从左右两边遍历。以左边为例,只要当前的数字比下一个数字大,那么这个数字的右边就可以存水,按照这个思路去分析就可以了,右边的也是一样的道...

weixin_43804406的博客 650

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

算法练习题之蓄水台阶

题目:有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢? 如下图,可以表示为数组[0,1,0,2,1,0,1,3,2,1,2,1],返回积水量6。 仅供参考: package www.lxk.com; import java.util.ArrayList; import java.util.Arrays; imp...

lixinkuan的博客 880

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

字节跳动编程题——接雨水

微信公众号:编程笔记本 点击上方蓝字关注我,我们一起学编程 欢迎小伙伴们分享、转载、私信、赞赏 今天我们一起来探讨一道字节跳动的算法面试题——接雨水。 题目:有一组不同高度的台阶,由一个整数数组表示,数组中每个元素代表台阶的高度。当开始下雨了(雨水足够多),台阶之间的水坑会积多少水呢?如下图所示,可以表示为数组 [0,1,0,2,1,0,1,3,2,1,2,1] ,程序返回积水量 6 。 图片 这道题十分有趣,解法也很多样。主要有暴力法、记忆法、双指针法等几种,下面我们一一探讨。 一、暴力法 当我们一开

qq_42247231的博客 2970

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

笔试刷题 | 积水问题(Python)

问题描述:在下图里我们有不同高度的挡板。这个图片由一个整数数组所代表,数组中每个数是墙的高度。下图可以表示为数组(2、5、1、2、3、4、7、2)。假如...

Chile_Wang的博客 1113

[twitter] 墙之间的水坑能够装多少水

“在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]” “假如开始下雨了,那么墙之间的水坑能够装多少水呢?” 解决思路: 1 初始化左指针为元素0的值,初始化右指针为元素size-1的值。 2 如果(左指针找到的左指针以左的最大值)小于(右指针找到右指针以右的最大值),将左指针向右移动一位。否则

楚兴 1843

洛谷 积水面积 超详细题解+思路分析

积水面积的详细题解,C++实现。

Mizuatira的博客 1069

积水问题

本文由 伯乐在线 - CuGBabyBeaR 翻译自 runkite。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。 确认我返回亚马逊实习的截止期限是10月28日,但是我的朋友Daniel说服我如果我被Twitter录取,我就不用参加任何面试了。所以我去Twitter面试了。 首先他们让我在一个小时内完成两道编程能力的问题。问题很有意思:“这是回文(译注:正着读和倒着读是一样的)吗

bjdu_jlxs的专栏 1400

[LeetCode] 407. 接雨水 II

407. 接雨水 II 给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。 示例: 给出如下 3x6 的高度图: [ [1,4,3,1,3,2], [3,2,1,3,2,4], [2,3,3,2,3,1] ] 返回 4 。 如上图所示,这是下雨前的高度图[[1,4,3,1,3,2],[3,2,1,3,2,4],...

virgilshi的博客 677

算法-接雨水问题

1. 柱子接雨水问题 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水,leetcode 原题 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水) 2. 解法 2.1 双指针 双指针分别指向数组两侧,取最小值作为水位值。此时忽略头尾中间的所有柱子,则头尾之间已经形成了坑洼,从

谈谈1974 2336

《LeetCode笔记71》:接雨水

给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。感谢 Marcos 贡献此图。 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/trapping-rain-water..

xin3475的博客 123

Leetcode Hot100不熟练题目 42. 接雨水

1、题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height = [4,2,0,3,2,5] 输出:9 ...

刘胖仔学后端 7038

LeetCode——42. 接雨水(暴力、双指针、DP、栈)

文章目录42. 接雨水(暴力、双指针、DP、栈)题目1、暴力遍历**:思想:**代码:**2、双指针**思想**代码** 42. 接雨水(暴力、双指针、DP、栈) 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/trapping-rain-water 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,

李霁明的博客 513

LeetCode42:接雨水

https://leetcode.com/problems/trapping-rain-water/ 问题描述 Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after ...

一面之媛 116
上一篇: Python--列表中嵌套字典,根据字典的值排序
下一篇: 用单向链表表示十进制整数,求两个正整数的和。如,1234+34=1268,注意单项链表的方向从前向后,不允许使用其他数据结构。
壹Sir
博客等级 码龄8年 15粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值