面试必考真题-算法篇 牛客网
双指针
题目描述
给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个容器,请返回容器能装多少水。
具体请参考样例解释
输入 | 返回值 |
---|---|
[3,1,2,5,2,4] | 5 |
示例示意图如下
下面是Java代码
import java.util.*;
public class Solution {
/**
* max water
* @param arr int整型一维数组 the array
* @return long长整型
*/
public long maxWater (int[] arr) {
// write code here
if(arr.length <=2){
return 0;
}
int len = arr.length;
int left = 0 ,right = len -1 ;
long sum = 0;
int left_Height = 0,right_Height = 0;
while(left < right){
left_Height = arr[left];
right_Height = arr[right];
if(left_Height < right_Height){
while(left<right && arr[left]<=left_Height){
sum +=left_Height-arr[left];
++left;//left++更新左侧最高的柱子,同下面right--对应,镜像,当while条件不满足时,结束当前计算循环
}
}else{
while(left<right && arr[right] <= right_Height){
sum +=right_Height - arr[right];
}
}
}
return sum;
}
}