题目描述

给定一个整形数组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;}
}

常考数据结构与算法:容器盛水问题相关推荐

  1. 常考数据结构与算法:输出二叉树的右视图

    题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...

  2. 常考数据结构与算法:求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  3. 常考数据结构与算法:删除链表的倒数第n个节点

    题目描述 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1-& ...

  4. 常考数据结构与算法:找到字符串的最长无重复字符子串

    题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...

  5. 常考数据结构与算法:最长公共子串

    题目描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一. 示例1 输入 "1AB2345CD","1 ...

  6. 常考数据结构与算法:两个链表生成相加链表

    题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. 例如:链表 1 为 9->3->7,链表 ...

  7. 常考数据结构与算法:买卖股票的最好时机

    题目描述 假设你有一个数组,其中第 i 个元素是股票在第i 天的价格. 你有一次买入和卖出的机会.(只有买入了股票以后才能卖出).请你设计一个算法来计算可以获得的最大收益. 示例 1: 输入: [8, ...

  8. 常考数据结构和算法:设计LRU缓存结构

    题目描述 设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能 set(key, value):将记录(key, value)插入该结构 get(key):返回key对应的val ...

  9. 常考数据结构与算法:每k个节点反转链表

    题目: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定这 ...

最新文章

  1. Windows下安装 openpyxl
  2. C语言变参函数的实现,C语言的那些小秘密之变参函数的实现
  3. Java中的基本数据类型以及Java的基本结构
  4. ajax返回的是流如何转换为pdf,如何在AJAX请求成功响应中返回PDF文件
  5. boost::mp11::mp_min_element相关用法的测试程序
  6. 三星Galaxy S21系列通过认证:终究还是要学苹果“保护环境”?
  7. 调用远程接口上传文件
  8. Assembly Manifest 通俗简易手册
  9. Linux-dns基础知识和BIND的简单配置-3(主从DNS服务器及转发)
  10. chrome浏览器不展示地址栏的完整路径解决
  11. python 简单文字游戏代码
  12. Eclipse 安装 yml 编辑器插件
  13. linux 安装mysql(rpm文件安装)
  14. 【python】【Gif制作】使用多张图片合成gif动图
  15. qq 客服 php,QQ支持临时会话设置
  16. 运筹说 第50期 | 图解法与单纯形法解目标规划
  17. 50件关于学霸与学渣的小事
  18. mysql count统计
  19. 怎么用clear case?
  20. Secure Code Warrlor学习记录(三)

热门文章

  1. GIL(全局解释器锁)与互斥锁
  2. Python函数内置函数
  3. Python爬虫selenium、PhanmJs
  4. 实验四、主存空间的分配和回收模拟
  5. 微软四十周年 Microsoft’s 40th anniversary
  6. SharePoint判断页面(或WebPart)是否处于编辑模式.
  7. csdn博客怎么修改字体的大小和颜色
  8. C/C++中.和-的用法区别
  9. 汇编语言随笔(14)-直接定址表、检测点16和实验16
  10. 二叉树的递归遍历和层序遍历(c/c++)