题目描述

我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟。

从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)

例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了 - 此时总共有三个满的玻璃杯。在倒第四杯后,第三层中间的玻璃杯盛放了一半的香槟,他两边的玻璃杯各自盛放了四分之一的香槟,如下图所示。

现在当倾倒了非负整数杯香槟后,返回第 i 行 j 个玻璃杯所盛放的香槟占玻璃杯容积的比例( i 和 j 都从0开始)。

示例 1:
输入: poured(倾倒香槟总杯数) = 1, query_glass(杯子的位置数) = 1, query_row(行数) = 1
输出: 0.00000
解释: 我们在顶层(下标是(0,0))倒了一杯香槟后,没有溢出,因此所有在顶层以下的玻璃杯都是空的。

示例 2:
输入: poured(倾倒香槟总杯数) = 2, query_glass(杯子的位置数) = 1, query_row(行数) = 1
输出: 0.50000
解释: 我们在顶层(下标是(0,0)倒了两杯香槟后,有一杯量的香槟将从顶层溢出,位于(1,0)的玻璃杯和(1,1)的玻璃杯平分了这一杯香槟,所以每个玻璃杯有一半的香槟。
示例 3:

输入: poured = 100000009, query_row = 33, query_glass = 17
输出: 1.00000

提示:

0 <= poured <= 109
0 <= query_glass <= query_row < 100

求解思路

  1. 模拟:每一层的首尾两个杯子只接收到斜上方杯子溢出的一半,其余的杯子是接收到头顶两个杯子各自溢出的一半之和

实现代码

class Solution {public double champagneTower(int poured, int query_row, int query_glass) {//记录一行的结果即可double count[]=new double[]{(double)poured};for(int i=1;i<=query_row;i++){//计算每一行的结果double arr[]=new double[i+1];//行起始位置arr[0]=Math.max(0,count[0]-1)/2;//行结束位置arr[i]=Math.max(0,count[i-1]-1)/2;//中间位置求解for(int j=1;j<i;j++){arr[j]=(Math.max(0,count[j-1]-1)+Math.max(0,count[j]-1))/2;}//更新每一行的结果count=arr;}//返回最后指定的位置return Math.min(1,count[query_glass]);}
}

运行结果

【LeetCode每日一题:799.香槟塔~~~模拟】相关推荐

  1. 一天一道算法题——799. 香槟塔

    题目描述 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢 ...

  2. Java实现 LeetCode 799 香槟塔 (暴力模拟)

    799. 香槟塔 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了 ...

  3. 799. 香槟塔 : 简单线性 DP 运用题

    题目描述 这是 LeetCode 上的 799. 香槟塔 ,难度为 中等. Tag : 「动态规划」.「线性 DP」 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个 ...

  4. Leetcode 每日一题双题版(2.25+2.24)模拟练细节

    Leetcode 每日一题双题版(2.25+2.24)模拟练细节 前言 刚刚敲了今天刷新的题目,然后昨天的也写了,就想着更新一下blog 两道题都是模拟题,对于模拟,我的看法就是看懂题目,拿捏细节,难 ...

  5. leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树

    leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...

  6. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  7. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  8. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  9. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

最新文章

  1. web前端开发培训完就业前景怎么样
  2. 使用tomcat搭建Jenkins环境(centos7.3)
  3. 让计算机时间和网络时间同步,如何让电脑时间与北京时间同步?
  4. Winform中实现根据CPU和硬盘获取机器码
  5. SQL 触发器 当修改TEST表中的F1字段时,同时根据条件修改F2字段
  6. C# Winform 出现异常:无法将顶级控件添加到控件,解决方案如下:
  7. java concurrent包介绍及使用
  8. C/C++编程笔记:经典游戏植物大战僵尸游戏辅助,源码送上
  9. OJ1039: n个数求和(C语言for循环)
  10. 精选CSDN的ACM-ICPC活跃博客
  11. java 元组_简单实现 Java 的 Tuple 元组数据类型
  12. 新建的ORACLE实例要开启监听,创建ORACLE实例与设置监听器过程
  13. ❤️《JUC并发编程从入门到高级》(建议收藏)❤️
  14. sqlite3 的基本使用 以及封装使用
  15. Eclipse调试远程服务器
  16. 从零开始学Docker(超详细讲解+案例分析)
  17. Java写个人博客,附超全教程文档
  18. 正则表达式给查找到的内容加引号
  19. 两岸四地消费者信心指数出炉:中国大陆消费者信心指数评析
  20. 一维数组和二维数组的定义及用法

热门文章

  1. tinymce采用cdn.jsdelivr.net cdn经常挂怎么办?
  2. c++小游戏——谷歌小恐龙
  3. vim的常用命令常规操作
  4. Data truncation Truncated incorrect DOUBLE value
  5. python调用c语言内核计算,在Linux上实现Python调用C语言函数
  6. 《CoCoNuT: Combining Context-Aware Neural Translation Models using Ensemble for Program Repair》论文笔记
  7. Webpack: CSS 到 Sass/Scss 与 CSS Module
  8. rk3288-android8-IR-mouse
  9. 家庭农场:职业农民要有一定文化水平 需要资格审查
  10. 关于web语义化的一些感悟