前言
博主刷的华为机考题,代码仅供参考,因为没有后台数据,可能有没考虑到的情况
如果感觉对你有帮助,请点点关注点点赞吧,谢谢你!
题目描述

思路
-
其实就是找一个最大的水坑,两个边界中不能有比边界高的
-
双指针: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;
}
}