Leetcode 3061. 计算滞留雨水
1.题目基本信息
1.1.题目描述
表:Heights
+-------------+------+
| Column Name | Type |
+-------------+------+
| id | int |
| height | int |
+-------------+------+
id 是这张表的主键(值互不相同的列),并且保证有序。
这张表的每一行都包含 id 和 height。
编写一个解决方案来计算景观中 沙洲之间 可以滞留的雨水量,认为每个沙洲的 宽度 为 1 个单位。
以 任何 顺序返回结果表。
1.2.题目地址
https://leetcode.cn/problems/calculate-trapping-rain-water/description/
2.解题方法
2.1.解题思路
请参考步骤
2.2.解题步骤
第一步,根据id升序排列和窗口函数,小于等于id的中记录中height的最大值left_max;并根据id降序排列和窗口函数,大于等于id的记录中height的最大值right_max
第二步,求LEAST(left_max,right_max)-height的列val
第三步,求val列的和
3.解题代码
sql代码
# Write your MySQL query statement below
# 第三步,求val列的和
SELECT
SUM(val) AS total_trapped_water
FROM (
# 第二步,求LEAST(left_max,right_max)-height的列val
SELECT
LEAST(left_max, right_max) - height AS val
FROM (
# 第一步,根据id升序排列和窗口函数,小于等于id的中记录中height的最大值left_max;并根据id降序排列和窗口函数,大于等于id的记录中height的最大值right_max
SELECT
height,
MAX(height) OVER (ORDER BY id) AS left_max,
MAX(height) OVER (ORDER BY id DESC) AS right_max
FROM Heights
) AS t1
) AS t2