华为OD机试真题 Java 实现【水库蓄水问题】

前言

博主刷的华为机考题,代码仅供参考,因为没有后台数据,可能有没考虑到的情况

如果感觉对你有帮助,请点点关注点点赞吧,谢谢你!

题目描述

思路

  1. 其实就是找一个最大的水坑,两个边界中不能有比边界高的

  2. 双指针:l=0,r=s.lenght-1,求中间的蓄水量,如果中间有更高的之久就返回-1

3.求中间的蓄水量

代码

java 复制代码
import java.util.Arrays;
import java.util.Scanner;

// 1 8 6 2 5 4 8 3 7
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Integer[] nums = Arrays.stream(sc.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
        int l=0,r=nums.length-1;
        int ll=l,rr=r,max=0;
        while(l<r-1){
            int maxNum=getNum(nums,l,r);
            if(maxNum>=max){
                max=maxNum;
                ll=l;
                rr=r;
            }
            if(nums[l]<nums[r]){
                l++;
            }else{
                r--;
            }
        }
        if(max==0)System.out.println(0);
        else System.out.println(ll+" "+rr+":"+max);
    }
    private static int getNum(Integer[] nums,int l,int r) {
        int height = 0;
        int min = Math.min(nums[l], nums[r]);
        for (int i = l+1; i <= r-1; i++) {
            if(nums[i]<min){
                height+=min-nums[i];
            }else{
                return -1;
            }
        }
        return height;
    }
}
相关推荐
.生产的驴7 分钟前
Vue3 数据可视化屏幕大屏适配 页面自适应 响应式 数据大屏 大屏适配
java·c++·vue.js·后端·信息可视化·前端框架·vue
龙泉寺天下行走14 分钟前
《进化陷阱》--AI 生成文章 《连载 1》
java·服务器·前端
王小义笔记23 分钟前
使用注解动态映射:根据实体List列表动态生成Excel文件
java·数据结构·list·excel·poi
crazyme_644 分钟前
C++ 中的暴力破解算法
开发语言·c++·算法
人类发明了工具1 小时前
【强化学习】深度强化学习 - Deep Q-Network(DQN)算法
算法·数学建模·强化学习
珹洺1 小时前
计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度
android·java·数据库
fei_sun1 小时前
【Harmony OS】作业四 布局
java·linux·网络
weixin_429326091 小时前
Spring MVC-面试题(33)
java·spring·mvc
为美好的生活献上中指1 小时前
java每日精进 5.20【MyBatis 联表&分页查询】
java·tomcat·mybatis·mpj
I AM_SUN1 小时前
146.LRU缓存-图解LRU
数据结构·c++·算法·leetcode·缓存·力扣