华为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;
    }
}
相关推荐
UseLessQQ6 小时前
云计算k8s集群部署
java·kubernetes·云计算
我命由我123457 小时前
人脸识别 - 人脸识别选帧
java·人工智能·python·算法·安全·java-ee·人脸识别
时针滴滴答啊7 小时前
最大子数组和
算法·leetcode·职场和发展
宠友信息7 小时前
IM系统开发技术路线分析,即时通讯源码助力快速搭建聊天应用
java·spring boot·redis·websocket·mysql·uni-app·vue
long3167 小时前
封装(Encapsulation)
java·人工智能·ai·ai编程
yaoxin5211237 小时前
502. Java 反射 - 编写 MessageInterceptor 类
java·开发语言
五月底_7 小时前
LIS算法
python·算法·最长子序列
风流 少年7 小时前
Spring AI 2.0:阿里云百炼平台(工作流应用)
java·后端·spring
长谷深风1117 小时前
AI Tool 设计:粒度、参数与错误恢复怎么做
java·大数据·人工智能·ai agent·agent工作流·智能体设计·ai产品设计
学学酱快乐8 小时前
2026年PMP考试生命周期选择决策树精讲:从需求判断到混合型统一框架的应试全攻略
算法·决策树·机器学习·pmp新版考试大纲·pmp新题型·pmp培训哪家好·pmp培训机构推荐