Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9217491

Browse files
Merge pull request SharingSource#749 from SharingSource/ac_oier
✨feat: add 799 & 1732
2 parents 094deed + f4ac328 commit 9217491

File tree

4 files changed

+210
-0
lines changed

4 files changed

+210
-0
lines changed

‎Index/模拟.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@
203203
| [1716. 计算力扣银行的钱](https://leetcode-cn.com/problems/calculate-money-in-leetcode-bank/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/calculate-money-in-leetcode-bank/solution/gong-shui-san-xie-jian-dan-mo-ni-ti-by-a-ifit/) | 简单 | 🤩🤩🤩🤩 |
204204
| [1720. 解码异或后的数组](https://leetcode-cn.com/problems/decode-xored-array/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/decode-xored-array/solution/gong-shui-san-xie-li-yong-yi-huo-xing-zh-p1bi/) | 简单 | 🤩🤩🤩 |
205205
| [1725. 可以形成最大正方形的矩形数目](https://leetcode-cn.com/problems/number-of-rectangles-that-can-form-the-largest-square/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/number-of-rectangles-that-can-form-the-largest-square/solution/gong-shui-san-xie-jian-dan-mo-ni-ti-by-a-7756/) | 简单 | 🤩🤩🤩🤩 |
206+
| [1732. 找到最高海拔](https://leetcode.cn/problems/find-the-highest-altitude/) | [LeetCode 题解链接](https://leetcode.cn/problems/find-the-highest-altitude/solution/by-ac_oier-a0j8/) | 简单 | 🤩🤩🤩🤩 |
206207
| [1736. 替换隐藏数字得到的最晚时间](https://leetcode-cn.com/problems/latest-time-by-replacing-hidden-digits/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/latest-time-by-replacing-hidden-digits/solution/gong-shui-san-xie-ti-huan-yin-cang-shu-z-2l1h/) | 简单 | 🤩🤩🤩🤩 |
207208
| [1737. 满足三条件之一需改变的最少字符数](https://leetcode.cn/problems/change-minimum-characters-to-satisfy-one-of-three-conditions/) | [LeetCode 题解链接](https://leetcode.cn/problems/change-minimum-characters-to-satisfy-one-of-three-conditions/solution/by-ac_oier-vs5u/) | 中等 | 🤩🤩🤩🤩 |
208209
| [1743. 从相邻元素对还原数组](https://leetcode-cn.com/problems/restore-the-array-from-adjacent-pairs/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/restore-the-array-from-adjacent-pairs/solution/gong-shui-san-xie-yi-ti-shuang-jie-dan-x-elpx/) | 中等 | 🤩🤩🤩🤩 |

‎Index/线性 DP.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
| [678. 有效的括号字符串](https://leetcode-cn.com/problems/valid-parenthesis-string/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/valid-parenthesis-string/solution/gong-shui-san-xie-yi-ti-shuang-jie-dong-801rq/) | 中等 | 🤩🤩🤩🤩🤩 |
1818
| [688. 骑士在棋盘上的概率](https://leetcode-cn.com/problems/knight-probability-in-chessboard/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/knight-probability-in-chessboard/solution/gong-shui-san-xie-jian-dan-qu-jian-dp-yu-st8l/) | 中等 | 🤩🤩🤩🤩🤩 |
1919
| [741. 摘樱桃](https://leetcode.cn/problems/cherry-pickup/) | [LeetCode 题解链接](https://leetcode.cn/problems/cherry-pickup/solution/by-ac_oier-pz7i/) | 困难 | 🤩🤩🤩🤩 |
20+
| [799. 香槟塔](https://leetcode.cn/problems/champagne-tower/) | [LeetCode 题解链接](https://leetcode.cn/problems/champagne-tower/solution/by-ac_oier-c8jn/) | 中等 | 🤩🤩🤩 |
2021
| [828. 统计子串中的唯一字符](https://leetcode.cn/problems/count-unique-characters-of-all-substrings-of-a-given-string/) | [LeetCode 题解链接](https://leetcode.cn/problems/count-unique-characters-of-all-substrings-of-a-given-string/solution/by-ac_oier-922k/) | 困难 | 🤩🤩🤩🤩 |
2122
| [978. 最长湍流子数组](https://leetcode-cn.com/problems/longest-turbulent-subarray/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/longest-turbulent-subarray/solution/xiang-jie-dong-tai-gui-hua-ru-he-cai-dp-3spgj/) | 中等 | 🤩🤩🤩🤩 |
2223
| [1137. 第 N 个泰波那契数](https://leetcode-cn.com/problems/n-th-tribonacci-number/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/n-th-tribonacci-number/solution/gong-shui-san-xie-yi-ti-si-jie-die-dai-d-m1ie/) | 简单 | 🤩🤩🤩🤩 |
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
### 题目描述
2+
3+
这是 LeetCode 上的 **[1732. 找到最高海拔](https://leetcode.cn/problems/find-the-highest-altitude/solution/by-ac_oier-a0j8/)** ,难度为 **简单**
4+
5+
Tag : 「模拟」
6+
7+
8+
9+
有一个自行车手打算进行一场公路骑行,这条路线总共由 $n + 1$ 个不同海拔的点组成。自行车手从海拔为 `0` 的点 `0` 开始骑行。
10+
11+
给你一个长度为 `n` 的整数数组 `gain`,其中 `gain[i]` 是点 `i` 和点 `i + 1` 的 净海拔高度差(0ドル <= i < n$)。请你返回 最高点的海拔 。
12+
13+
示例 1:
14+
```
15+
输入:gain = [-5,1,5,0,-7]
16+
17+
输出:1
18+
19+
解释:海拔高度依次为 [0,-5,-4,1,1,-6] 。最高海拔为 1 。
20+
```
21+
示例 2:
22+
```
23+
输入:gain = [-4,-3,-2,-1,4,3,2]
24+
25+
输出:0
26+
27+
解释:海拔高度依次为 [0,-4,-7,-9,-10,-6,-3,-1] 。最高海拔为 0 。
28+
```
29+
30+
提示:
31+
* $n = gain.length$
32+
* 1ドル <= n <= 100$
33+
* $-100 <= gain[i] <= 100$
34+
35+
---
36+
37+
### 模拟
38+
39+
根据题意进行模拟即可。
40+
41+
Java 代码:
42+
```Java
43+
class Solution {
44+
public int largestAltitude(int[] g) {
45+
int cur = 0, ans = 0;
46+
for (int x : g) {
47+
cur += x;
48+
ans = Math.max(ans, cur);
49+
}
50+
return ans;
51+
}
52+
}
53+
```
54+
TypeScript 代码:
55+
```TypeScript
56+
function largestAltitude(g: number[]): number {
57+
let cur = 0, ans = 0
58+
for (let x of g) {
59+
cur += x
60+
ans = Math.max(ans, cur)
61+
}
62+
return ans
63+
}
64+
```
65+
Python3 代码:
66+
```Python
67+
class Solution:
68+
def largestAltitude(self, g: List[int]) -> int:
69+
cur, ans = 0, 0
70+
for x in g:
71+
cur += x
72+
ans = max(ans, cur)
73+
return ans
74+
```
75+
* 时间复杂度:$O(n)$
76+
* 空间复杂度:$O(1)$
77+
78+
---
79+
80+
### 最后
81+
82+
这是我们「刷穿 LeetCode」系列文章的第 `No.1732` 篇,系列开始于 2021年01月01日,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。
83+
84+
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
85+
86+
为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode
87+
88+
在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。
89+
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
### 题目描述
2+
3+
这是 LeetCode 上的 **[799. 香槟塔](https://leetcode.cn/problems/champagne-tower/solution/by-ac_oier-c8jn/)** ,难度为 **中等**
4+
5+
Tag : 「动态规划」、「线性 DP」
6+
7+
8+
9+
我们把玻璃杯摆成金字塔的形状,其中 第一层 有 `1` 个玻璃杯, 第二层 有 `2` 个,依次类推到第 `100` 层,每个玻璃杯 (`250ml`) 将盛有香槟。
10+
11+
从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)
12+
13+
例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了 - 此时总共有三个满的玻璃杯。在倒第四杯后,第三层中间的玻璃杯盛放了一半的香槟,他两边的玻璃杯各自盛放了四分之一的香槟,如下图所示。
14+
15+
![](https://s3-lc-upload.s3.amazonaws.com/uploads/2018/03/09/tower.png)
16+
17+
现在当倾倒了非负整数杯香槟后,返回第 i 行 j 个玻璃杯所盛放的香槟占玻璃杯容积的比例( i 和 j 都从0开始)。
18+
19+
示例 1:
20+
```
21+
输入: poured(倾倒香槟总杯数) = 1, query_glass(杯子的位置数) = 1, query_row(行数) = 1
22+
23+
输出: 0.00000
24+
25+
解释: 我们在顶层(下标是(0,0))倒了一杯香槟后,没有溢出,因此所有在顶层以下的玻璃杯都是空的。
26+
```
27+
示例 2:
28+
```
29+
输入: poured(倾倒香槟总杯数) = 2, query_glass(杯子的位置数) = 1, query_row(行数) = 1
30+
31+
输出: 0.50000
32+
33+
解释: 我们在顶层(下标是(0,0)倒了两杯香槟后,有一杯量的香槟将从顶层溢出,位于(1,0)的玻璃杯和(1,1)的玻璃杯平分了这一杯香槟,所以每个玻璃杯有一半的香槟。
34+
```
35+
示例 3:
36+
```
37+
输入: poured = 100000009, query_row = 33, query_glass = 17
38+
39+
输出: 1.00000
40+
```
41+
42+
提示:
43+
* 0ドル <= poured <= 10^9$
44+
* 0ドル <= query_glass <= query_row < 100$
45+
46+
---
47+
48+
### 线性 DP
49+
50+
为了方便,我们令 `poured``k`,`query_row``query_glass` 分别为 $n$ 和 $m$。
51+
52+
定义 $f[i][j]$ 为第 $i$ 行第 $j$ 列杯子所经过的水的流量(而不是最终剩余的水量)。
53+
54+
起始我们有 $f[0][0] = k,ドル最终答案为 $\min(f[n][m], 1)$。
55+
56+
不失一般性考虑 $f[i][j]$ 能够更新哪些状态:显然当 $f[i][j]$ 不足 1ドル$ 的时候,不会有水从杯子里溢出,即 $f[i][j]$ 将不能更新其他状态;当 $f[i][j]$ 大于 1ドル$ 时,将会有 $f[i][j] - 1$ 的水会等量留到下一行的杯子里,所流向的杯子分别是「第 $i + 1$ 行第 $j$ 列的杯子」和「第 $i + 1$ 行第 $j + 1$ 列的杯子」,增加流量均为 $\frac{f[i][j] - 1}{2},ドル即有 $f[i + 1][j] += \frac{f[i][j] - 1}{2}$ 和 $f[i + 1][j + 1] += \frac{f[i][j] - 1}{2}$。
57+
58+
Java 代码:
59+
```Java
60+
class Solution {
61+
public double champagneTower(int k, int n, int m) {
62+
double[][] f = new double[n + 10][n + 10];
63+
f[0][0] = k;
64+
for (int i = 0; i <= n; i++) {
65+
for (int j = 0; j <= i; j++) {
66+
if (f[i][j] <= 1) continue;
67+
f[i + 1][j] += (f[i][j] - 1) / 2;
68+
f[i + 1][j + 1] += (f[i][j] - 1) / 2;
69+
}
70+
}
71+
return Math.min(f[n][m], 1);
72+
}
73+
}
74+
```
75+
TypeScript 代码:
76+
```TypeScript
77+
function champagneTower(k: number, n: number, m: number): number {
78+
const f = new Array<Array<number>>()
79+
for (let i = 0; i < n + 10; i++) f.push(new Array<number>(n + 10).fill(0))
80+
f[0][0] = k
81+
for (let i = 0; i <= n; i++) {
82+
for (let j = 0; j <= i; j++) {
83+
if (f[i][j] <= 1) continue
84+
f[i + 1][j] += (f[i][j] - 1) / 2
85+
f[i + 1][j + 1] += (f[i][j] - 1) / 2
86+
}
87+
}
88+
return Math.min(f[n][m], 1)
89+
}
90+
```
91+
Python3 代码:
92+
```Python
93+
class Solution:
94+
def champagneTower(self, k: int, n: int, m: int) -> float:
95+
f = [[0] * (n + 10) for _ in range(n + 10)]
96+
f[0][0] = k
97+
for i in range(n + 1):
98+
for j in range(i + 1):
99+
if f[i][j] <= 1:
100+
continue
101+
f[i + 1][j] += (f[i][j] - 1) / 2
102+
f[i + 1][j + 1] += (f[i][j] - 1) / 2
103+
return min(f[n][m], 1)
104+
```
105+
* 时间复杂度:$O(n^2)$
106+
* 空间复杂度:$O(n^2)$
107+
108+
---
109+
110+
### 最后
111+
112+
这是我们「刷穿 LeetCode」系列文章的第 `No.799` 篇,系列开始于 2021年01月01日,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。
113+
114+
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
115+
116+
为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode
117+
118+
在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。
119+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /