常考数据结构与算法:容器盛水问题
生活随笔
收集整理的這篇文章主要介紹了
常考数据结构与算法:容器盛水问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
給定一個整形數組arr,已知其中所有的值都是非負的,將這個數組看作一個容器,請返回容器能裝多少水。
示例
輸入
[3,1,2,5,2,4]返回值
5?
思路
能裝多少水是由左右兩邊較低的邊決定的,因此采用雙指針,從開頭和最后向中間靠攏,當位置i的數小于較低邊表示可以裝水。當位置i的數大于較低邊時,更新較低邊為位置i的值。
public class MaxWaterStruct {public static void main(String[] args) {int[] arr = {3,1,2,5,2,4};MaxWaterStruct maxWaterStruct = new MaxWaterStruct();long l = maxWaterStruct.maxWater(arr);System.out.println(l);}public long maxWater (int[] arr) {// write code hereif(arr.length < 1){return 0;}int i = 0; // 左指針int j = arr.length - 1; // 右指針int maxLeft = arr[i]; //桶左邊的長度int maxRight = arr[j]; // 桶右邊的長度long ret = 0L; // 盛水總量while(i < j){// 較低邊為左邊if(maxLeft < maxRight){i++;// 當前位置i小于大于較低邊,更新較低邊的值,小于裝水if(arr[i] > maxLeft){maxLeft = arr[i];}else{ret += maxLeft - arr[i];}}else{// 較低邊為右邊j--;// 當前位置i小于大于較低邊,更新較低邊的值,小于裝水if(arr[j] > maxRight){maxRight = arr[j];}else{ret += maxRight - arr[j];}}}return ret;} }?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的常考数据结构与算法:容器盛水问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常考数据结构与算法:在转动过的有序数组中
- 下一篇: 计算机网络:协议