【程序员面试金典】面试题 17.21. 直方图的水量

这篇具有很好参考价值的文章主要介绍了【程序员面试金典】面试题 17.21. 直方图的水量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

描述:给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。

【程序员面试金典】面试题 17.21. 直方图的水量

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。 感谢 Marcos 贡献此图。

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

解题思路

思路:最直观的想法是,当前直方图所能存储水量等于左边最大值和右边最大值之间的最小值减去当前高度,直方图的水量即所有直方图的水量之和。首先分别前向遍历、后向遍历求出当前直方图左边(包含当前)、右边(包含当前)的最大值,然后再前向遍历求出当前直方图水量即可。

int trap(vector<int>& height) 
{
  int n=height.size();
  //特殊判断
  if(n==0)
    return 0;
  //存储当前元素左边(包含当前)的最大值
  vector<int> left(n,0);
  //存储当前元素右边(包含当前)的最大值
  vector<int> right(n,0);
  left[0]=height[0];
  right[n-1]=height[n-1];
  for(int i=1;i<n;i++)
     left[i]=max(left[i-1],height[i]);
  for(int i=n-2;i>=0;i--)
     right[i]=max(right[i+1],height[i]);
  int res=0;
  //所能存储水量等于左边最大值和右边最大值之间的最小值减去当前高度
  for(int i=0;i<n;i++)
     res+=min(left[i],right[i])-height[i];
  return res;
}

总结:注意,之所以包含当前,是为了方便计算,因为有可能当前就是最高的。文章来源地址https://www.toymoban.com/news/detail-512557.html

到了这里,关于【程序员面试金典】面试题 17.21. 直方图的水量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【程序员面试金典】面试题 17.26. 稀疏相似度

    描述:两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数,就是这两个文档的相似度。例如,{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4,其中,交集的元素有 2 个,并集的元素有 5 个。给定一系列的长篇文档,每个文档元素各不相同,并与一个

    2024年02月12日
    浏览(40)
  • 【程序员面试金典】面试题 17.25 . 单词矩阵

    描述:给定一份单词的清单,设计一个算法,创建由字母组成的面积最大的矩形,其中每一行组成一个单词(自左向右),每一列也组成一个单词(自上而下)。不要求这些单词在清单里连续出现,但要求所有行等长,所有列等高。 如果有多个面积最大的矩形,输出任意一个均可

    2024年02月12日
    浏览(45)
  • 【程序员面试金典】面试题 17.19. 消失的两个数字

    描述:给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗? 以任意顺序返回这两个数字均可。 示例 1: 示例 2: 提示: nums.length = 30000 思路:最直观的想法是,位运算。消失的两个数字和只出现一次的两个元素,本质

    2024年02月12日
    浏览(52)
  • 【程序员面试金典】面试题 17.14. 最小K个数

    描述:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。 示例: 提示: 0 = len(arr) = 100000 0 = k = min(100000, len(arr)) 思路:最直观的想法是,排序。 扩展:最大堆。最小的k个数,那么就可以维持一个大小为k的最大堆,先填充k个数到最大堆中,然后再依次遍

    2024年02月11日
    浏览(55)
  • 《程序员面试金典(第6版)面试题 16.10. 生存人数(前缀和思想)

    给定 N 个人的出生年份和死亡年份,第 i 个人的出生年份为 birth[i],死亡年份为 death[i],实现一个方法以计算生存人数最多的年份。 你可以假设所有人都出生于 1900 年至 2000 年(含 1900 和 2000 )之间。如果一个人在某一年的任意时期处于生存状态,那么他应该被纳入那一年的

    2024年02月02日
    浏览(53)
  • 《程序员面试金典(第6版)》 面试题 08.11. 硬币(动态规划,组合问题,C++)

    硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007) 示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额: 5=5 5=1+1+1+1+1 示例2: 输入: n = 10 输出:4 解释: 有四种方式可以凑成总金额: 1

    2023年04月08日
    浏览(54)
  • ChatGPT写21个程序,16个有漏洞:离取代程序员还远着呢!

    近年来,大型语言模型推动人工智能领域取得了巨大的进步。其中,OpenAI 打造的 ChatGPT 甫一亮相,就凭借出色的性能震惊全球。ChatGPT 不仅能够处理普通文本,还能将自然语言翻译成代码,其惊艳表现甚至引发了“是否会取代程序员”的讨论。 但最新研究发现,ChatGPT 生成的

    2023年04月26日
    浏览(47)
  • 读程序员的README笔记17_构建可演进的架构(下)

    1.3.3.1. 开发人员可以只专注于和自己相关的字段,因为它们会继承其他字段的默认值 1.3.3.2. 默认值可使大型API在感觉上很小巧 1.4.1.1. OpenAPI通常用于RESTful服务 1.4.1.2. non-REST服务则使用Protocol Buffers、Thrift或类似的接口定义语言(interface definition language,IDL) 1.4.1.3. 接口定义工

    2024年02月04日
    浏览(57)
  • 程序员面试逻辑题

    答案: 这个题有点像数学归纳法,就是假设有 A A A 和 B B B 两个人是黑色的帽子,这样的话第一次开灯, A A A 看到 B B B 是黑色的,其他人都是白色的,那么 A A A 会觉得 B B B 是那个黑色的,同理 B B B 也是这么想的。一次关灯之后 A A A 和 B B B 都没有打耳光, A A A 反应过来

    2024年02月09日
    浏览(89)
  • 程序员必备的面试技巧

    “程序员必备的面试技巧,就像是编写一段完美的代码一样重要。在面试战场上,我们需要像忍者一样灵活,像侦探一样聪明,还要像无敌铁金刚一样坚定。只有掌握了这些技巧,我们才能在面试的舞台上闪耀光芒,成为那个令HR们心动的程序猿!” 提醒:在发布作品前,请

    2024年01月21日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包