class Solution { public: /** * max water * @param arr int整型vector the array * @return long长整型 */ long long maxWater(vector<int>& arr) { // write code here if(arr.size() < 3) return 0; long long res = 0; // 设置双指针,l指向数组开头,r指向数组末尾 int l = 0, r = arr.size() - 1; // 求出左边和右边的最大值 int l_max = 0, r_max = 0; // 每次都计算每个索引位置上存储的水,并加起来 while(l < r) { // 当左边索引小于右边索引时 l_max = max(l_max, arr[l]); r_max = max(r_max, arr[r]); if(arr[l] < arr[r]) { // 如果右边的元素大于左边,则计算左边cunc res += l_max - arr[l]; l++; }else { // 如果右边的元素小于左边,则计算右边存储的水 res += r_max - arr[r]; r--; } } return res; } };