水容器问题

 

给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个容器,请返回容器能装多少水。

[3,1,2,5,2,4]

输出

5
func maxWater( arr []int ) int64 {
    // write code here
    if len(arr) <3{return 0}
    water := 0
    i,j := 0,len(arr)-1
    maxLeft := arr[i]; //桶左边的长度
    maxRight := arr[j]; // 桶右边的长度
         // 盛水总量
        for (i < j){
        	// 较低边为左边
            if(maxLeft < maxRight){
                i++;
                // 当前位置i小于大于较低边,更新较低边的值,小于装水
                if(arr[i] > maxLeft){
                    maxLeft = arr[i];
                }else{
                    water += maxLeft - arr[i];
                }
            }else{
            	// 较低边为右边
                j--;
                 // 当前位置i小于大于较低边,更新较低边的值,小于装水
                if(arr[j] > maxRight){
                    maxRight = arr[j];
                }else{
                    water += maxRight - arr[j];
                }
            }
        }
    return int64(water)
}

  

posted @ 2021-03-02 19:11  布尔先生  阅读(135)  评论(0编辑  收藏  举报