华为OD机试真题 Python 实现【天然蓄水池】【2023Q1 200分】,附详细解题思路

news2024/11/15 19:58:27

在这里插入图片描述

一、题目描述

公元2919年,人类终于发现了一颗宜居星球——X星。现想在X星一片连绵起伏的山脉间建一个天然蓄水库,如何选取水库边界,使蓄水量最大?

要求:

山脉用正整数数组s表示,每个元素代表山脉的高度。

选取山脉上两个点作为蓄水库的边界,则边界内的区域可以蓄水,蓄水量需排除山脉占用的空间。

蓄水量的高度为两边界的最小值。

如果出现多个满足条件的边界,应选取距离最近的一组边界。

输出边界下标(从0开始)和最大蓄水量;如果无法蓄水,则返回0,此时不返回边界。

例如,当山脉为s = [3, 1, 2]时,则选取s[0]和s[2]作为水库边界,则蓄水量为1,此时输出:0 2:1
当山脉`s = [3, 2, 1]时,不存在合理的边界,此时输出:0。

二、输入描述

一行正整数,用空格隔开,例如输入
1 2 3
表示 s = [1, 2, 3]

三、输出描述

当存在合理的水库边界时,输出左边界、空格、右边界、英文冒号、蓄水量;例如
0 2:1
当不存在合理的水库边界时,输出 0;例如
0

四、补充说明

数组s满足:
1 <= length(s) <= 10000
0 <= s[i] <= 10000

五、解题思路

  1. 读取输入的山脉数组s。
  2. 初始化左边界l、右边界r和最大蓄水量max为0。
  3. 使用两个指针m和n分别指向山脉数组的第一个和最后一个元素。
  4. 遍历山脉数组,从m=0到n-1:
    • 如果当前山脉高度小于等于下一个山脉高度(升序),则跳过当前山脉,继续下一轮循环。
    • 否则,使用一个新的指针i从m+2到n,遍历右边界:
      • 如果当前山脉高度大于等于前一个山脉高度(降序),则跳过当前山脉,继续下一轮循环。
      • 否则,计算当前左边界和右边界之间的蓄水量:
        • 获取左边界和右边界之间的高度h,即左边界和右边界中较小的山脉高度。
        • 使用流处理左边界和右边界之间的山脉高度,过滤出高度小于h的山脉,计算蓄水量(h - num)并求和。
        • 如果蓄水量大于已有的最大蓄水量max,则更新左边界l、右边界r和最大蓄水量max。
  5. 输出最大蓄水量和边界信息:
    • 如果最大蓄水量大于0,则输出左边界l、右边界r和最大蓄水量max。
    • 否则,输出0表示无法蓄水。

六、Python算法源码

def calculate_max_reservoir(arr):
    l = 0
    r = 0
    max_reservoir = 0
    n = len(arr)

    for m in range(n - 1):
        if arr[m] <= arr[m + 1]:
            continue
        for i in range(m + 2, n):
            if arr[i - 1] >= arr[i]:
                continue
            h = min(arr[m], arr[i])
            total = sum(h - num for num in arr[m + 1:i] if num < h)
            if total > max_reservoir:
                l = m
                r = i
                max_reservoir = total

    return f"{l} {r}:{max_reservoir}" if max_reservoir > 0 else "0"

七、效果展示

1、输入

1 9 6 2 5 4 9 3 7

2、输出

1 6:19

3、说明

经过分析,选取s[1]和s[6]时,水库蓄水量为19(3 + 7 + 4 + 5)。

在这里插入图片描述



🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/696888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于GPT3.5模型搭建的聊天系统BAIChat

1. 使用chatgpt前提条件 需要特殊的网络环境。如果是小白&#xff0c;不会搭建网络环境&#xff0c;可以关注我私信我&#xff0c;在线帮你搭建网络环境。 2.BAIChat链接 https://chatbot.theb.ai/#/chat/1686535596065 GPT3 研究背景 最近的研究表明&#xff0c;在 pretrai…

docker命令创建 Portainer容器

Portainer控制台可查看docker中各个容器的相关信息&#xff0c;实时查看容器启动日志以及对各个容器进行重启、删除&#xff0c;重建等代替命令的一列操作&#xff0c;使用起来非常方便。 创建目录data并赋权限 # 数据目录 mkdir -p /software/docker/portainer/data # 赋权限…

线性代数高级--二次型--特征值与特征向量--特征值分解--多元函数的泰勒展开

目录 二次型 概念 示例 性质和特点 特征值与特征向量 概念 示例 注意 性质和特点 特征值分解 注意 多元函数的泰勒展开 回顾一元函数泰勒展开 多元函数的泰勒展开 二次型 概念 二次型是一个关于向量的二次多项式&#xff0c;通常用矩阵表示。 考虑一个n维向量…

Oracle 实现A表B表字段/表名不同,定时任务+存储过程,定期执行增删改查

说明 假设Oracle A表B表 &#xff0c;表字段不同&#xff0c;表名也不同&#xff0c; 通过存储过程 定时任务(Jobs)&#xff0c; 定期去执行业务逻辑的增删改查 。 1、定时同步 创建一个存储过程&#xff0c;用于比较两张表中的数据&#xff0c;并根据状态决定需要同步的数据。…

java开发必备技能之Spring常用注解(重点)

参考了尚硅谷注解版&#xff0c;注解版后面的源码没看&#xff0c;雷神讲的太散了 Spring注解 AnnotationConfigApplicationContext 组件添加相关注解 1、ConfigurationBean (基础) 1-1 XML文件方式实现组件添加 public class Person { private String name;private Integ…

五个漂亮的 Arch Linux 发行版

导读本文将介绍几个漂亮的 Arch Linux 发行版&#xff0c;这些发行版将设计的优雅之美与 Arch Linux 强大的底层框架相结合。 Arch Linux 提供滚动更新模型、强大的 pacman 软件包管理器&#xff0c;以及通过其软件仓库提供的成千上万的应用程序。它非常受欢迎&#xff0c;因为…

多线程之wait()和notify()详解

1.每个Java对象都有一个监视器&#xff08;monitor&#xff09;&#xff0c;它是用来控制对该对象的访问的。一个线程要想进入某个对象的监视器区域&#xff0c;必须先获得该对象的锁。然后可以通过wait方法来释放该对象的锁并进入等待状态&#xff0c;直到其他线程调用notify或…

python读取.ann文件编码格式

encoding‘latin1.(gbk和utf-8均报错) 【还是chatpgt告诉我的呢】

oracle查看当前实例与切换实例

查看实例 select name from v$database;切换实例 sqlplus /ORCL as sysdba

【前端工程化】深入浅出vite(二)--vue3全家桶+ts构建后管系统

安装基础包 npm create vitelatest # 这里选择的是VueTypescript的组合 cd vue-admin npm install# 先安装基础包 npm install vue-router4 npm i pinia npm i axios npm install sass --save-dev npm install element-plus --save npm install element-plus/icons-vue npm in…

全志V3S嵌入式驱动开发(spi-nor image制作)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 其实&#xff0c;我们之前就讨论过怎么把image烧入到v3s的spi-nor当中去。当时使用的方法是借助于sunxi-fel工具&#xff0c;烧入的image也比计较小…

2. 计算点到平面的投影

参考 https://www.cnblogs.com/nobodyzhou/p/6145030.html 所以用各种平面提取算法后&#xff0c;得到的平面方程, 注意此处的平面方程abcd已经是归一化了。 a x b y c z d 0 ax by cz d 0 axbyczd0 此时的原点到该平面点的投影点为 C P ( − a d , − b d , − c …

渗透测试内网基础知识

点赞后看&#xff0c;养成习惯 喜欢的话 可以点个关注哟 你们的点赞支持对博主们来说很重要哦 &#xff01;&#xff01;&#xff01; 为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 内网概述02 工作组03 域04 活动目录05 域控制器和活动目录的…

【C/C++】使用类和对象 设计点和圆的关系案例

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

误删除boot目录 修复办法

误删除boot目录 修复办法 本次演示系统为kylin-v10-sp3-20230324&#xff0c;kernel&#xff1a;4.19.90-52.22.v2207.ky10.x86_64 文章目录 误删除boot目录 修复办法1.报错现象2.正常机器boot目录结构3.误删除boot目录4.故障修复挂载光盘&#xff0c;进入救援模式 5.非正常情况…

mysql8.0.26忘记密码后重置(centos8)

1、查看配置文件地址 mysql --help|grep my.cnf 2、编辑/etc/my.cnf配置文件 vim /etc/my.cnf增加跳过密码配置 [mysqld] skip-grant-tables 3、重启mysql service mysqld restart4、修改密码 use mysql; update user set authentication_string where userroot; FLUSH pr…

NoSQL之Redis配置与优化(初级)理论较多

目录 一、关系数据库与非关系型数据库 1、 关系型数据库 2、 非关系型数据库 二、关系型数据库和非关系型数据库区别 1、 数据存储方式不同 2、 扩展方式不同 3、 对事务性的支持不同 三、非关系型数据库产生背景 1、可用于应对Web2.0纯动态网站类型的三高问题&#xf…

大数据Doris(五十一):Export语法和结果

文章目录 Export语法和结果 一、语法 二、结果 Export语法和结果 一、语法 Export 需要借助 Broker 进程访问远端存储&#xff0c;不同的 Broker 需要提供不同的参数&#xff0c;这里以导出到HDFS为例介绍Export 写法&#xff0c;也可以通过"help export "命令查…

Azure CLI - Premium SSD V1磁盘迁移至Premium SSD V2

目录 1.从服务器卸载Premium SSD V1 磁盘 2.创建Premium SSD V1磁盘snapshot 3.创建Premium SSD V2磁盘 4.挂载Premium SSD V2磁盘到服务器 已经在生产使用的Premium SSD V1磁盘&#xff0c;通过制作快照后&#xff0c;购买Premium SSD V2磁盘。 1.从服务器卸载Premium SSD…

Intellij IDEA detected unusually high memory use

一、IDEA如图 二、解决 2.1 修改IDEA的内存堆 运行IntelliJ IDEA的Java虚拟机&#xff08;JVM&#xff09;分配一些预定义的内存量。默认值取决于平台。如果您遇到速度减慢&#xff0c;可能需要增加内存堆。 为运行IDE分配的堆大小与编译应用程序的堆大小不同。如果要为编译代…