Skip to content

Commit 4f632c8

Browse files
Merge pull request youngyangyang04#2211 from jinbudaily/master
更新 单调栈章节和额外题目 排版格式修复
2 parents 4037eb6 + e7c1224 commit 4f632c8

31 files changed

+370
-238
lines changed

problems/0005.最长回文子串.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,17 @@
3030
* 输出:"a"
3131

3232

33-
# 思路
33+
## 思路
3434

3535
本题和[647.回文子串](https://programmercarl.com/0647.回文子串.html) 差不多是一样的,但647.回文子串更基本一点,建议可以先做647.回文子串
3636

37-
## 暴力解法
37+
### 暴力解法
3838

3939
两层for循环,遍历区间起始位置和终止位置,然后判断这个区间是不是回文。
4040

4141
时间复杂度:O(n^3)
4242

43-
## 动态规划
43+
### 动态规划
4444

4545
动规五部曲:
4646

@@ -208,7 +208,7 @@ public:
208208
* 时间复杂度:O(n^2)
209209
* 空间复杂度:O(n^2)
210210
211-
## 双指针
211+
### 双指针
212212
213213
动态规划的空间复杂度是偏高的,我们再看一下双指针法。
214214
@@ -258,9 +258,9 @@ public:
258258

259259

260260

261-
# 其他语言版本
261+
## 其他语言版本
262262

263-
Java:
263+
### Java:
264264

265265
```java
266266
// 双指针 动态规划
@@ -327,7 +327,7 @@ class Solution {
327327
}
328328
```
329329

330-
Python:
330+
### Python:
331331

332332
```python
333333
class Solution:
@@ -377,7 +377,7 @@ class Solution:
377377
return s[start:end]
378378

379379
```
380-
Go:
380+
### Go:
381381

382382
```go
383383
func longestPalindrome(s string) string {
@@ -411,7 +411,7 @@ func longestPalindrome(s string) string {
411411

412412
```
413413

414-
JavaScript:
414+
### JavaScript:
415415

416416
```js
417417
//动态规划解法
@@ -527,7 +527,7 @@ var longestPalindrome = function(s) {
527527
};
528528
```
529529

530-
C:
530+
### C:
531531

532532
动态规划:
533533
```c
@@ -615,7 +615,7 @@ char * longestPalindrome(char * s){
615615
}
616616
```
617617

618-
C#:
618+
### C#:
619619

620620
動態規則:
621621
```c#
@@ -681,3 +681,4 @@ public class Solution {
681681
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
682682
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
683683
</a>
684+

problems/0031.下一个排列.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
* 输出:[1]
3535

3636

37-
# 思路
37+
## 思路
3838

3939
一些同学可能手动写排列的顺序,都没有写对,那么写程序的话思路一定是有问题的了,我这里以1234为例子,把全排列都列出来。可以参考一下规律所在:
4040

@@ -92,9 +92,9 @@ public:
9292
};
9393
```
9494
95-
# 其他语言版本
95+
## 其他语言版本
9696
97-
## Java
97+
### Java
9898
9999
```java
100100
class Solution {
@@ -159,7 +159,7 @@ class Solution {
159159
}
160160
```
161161
162-
## Python
162+
### Python
163163
>直接使用sorted()会开辟新的空间并返回一个新的list,故补充一个原地反转函数
164164
```python
165165
class Solution:
@@ -191,7 +191,7 @@ class Solution:
191191
"""
192192
```
193193

194-
## Go
194+
### Go
195195

196196
```go
197197
//卡尔的解法
@@ -216,7 +216,7 @@ func reverse(a []int,begin,end int){
216216
}
217217
```
218218

219-
## JavaScript
219+
### JavaScript
220220

221221
```js
222222
//卡尔的解法(吐槽一下JavaScript的sort和其他语言的不太一样,只想到了拷贝数组去排序再替换原数组来实现nums的[i + 1, nums.length)升序排序)
@@ -272,3 +272,4 @@ var nextPermutation = function(nums) {
272272
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
273273
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
274274
</a>
275+

problems/0042.接雨水.md

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* 输出:9
3030

3131

32-
# 思路
32+
## 思路
3333

3434
接雨水问题在面试中还是常见题目的,有必要好好讲一讲。
3535

@@ -39,7 +39,7 @@
3939
* 动态规划
4040
* 单调栈
4141

42-
## 暴力解法
42+
### 暴力解法
4343

4444
本题暴力解法也是也是使用双指针。
4545

@@ -137,7 +137,7 @@ public:
137137

138138
力扣后面修改了后台测试数据,所以以上暴力解法超时了。
139139

140-
## 双指针优化
140+
### 双指针优化
141141

142142

143143
在暴力解法中,我们可以看到只要记录左边柱子的最高高度 和 右边柱子的最高高度,就可以计算当前位置的雨水面积,这就是通过列来计算。
@@ -184,7 +184,7 @@ public:
184184
};
185185
```
186186

187-
## 单调栈解法
187+
### 单调栈解法
188188

189189
关于单调栈的理论基础,单调栈适合解决什么问题,单调栈的工作过程,大家可以先看这题讲解 [739. 每日温度](https://programmercarl.com/0739.每日温度.html)
190190

@@ -194,7 +194,7 @@ public:
194194

195195
而接雨水这道题目,我们正需要寻找一个元素,右边最大元素以及左边最大元素,来计算雨水面积。
196196

197-
### 准备工作
197+
#### 准备工作
198198

199199
那么本题使用单调栈有如下几个问题:
200200

@@ -248,7 +248,7 @@ stack<int> st; // 存着下标,计算的时候用下标对应的柱子高度
248248

249249
明确了如上几点,我们再来看处理逻辑。
250250

251-
### 单调栈处理逻辑
251+
#### 单调栈处理逻辑
252252

253253
以下操作过程其实和 [739. 每日温度](https://programmercarl.com/0739.每日温度.html) 也是一样的,建议先做 [739. 每日温度](https://programmercarl.com/0739.每日温度.html)
254254

@@ -596,7 +596,7 @@ class Solution:
596596

597597
```
598598

599-
### Go
599+
### Go:
600600

601601
```go
602602
func trap(height []int) int {
@@ -802,7 +802,7 @@ var trap = function(height) {
802802
};
803803
```
804804

805-
### TypeScript
805+
### TypeScript:
806806

807807
暴力解法:
808808

@@ -925,6 +925,55 @@ int trap(int* height, int heightSize) {
925925
* 时间复杂度 O(n)
926926
* 空间复杂度 O(1)
927927
928+
### Rust:
929+
930+
双指针
931+
932+
```rust
933+
impl Solution {
934+
pub fn trap(height: Vec<i32>) -> i32 {
935+
let n = height.len();
936+
let mut max_left = vec![0; height.len()];
937+
let mut max_right = vec![0; height.len()];
938+
max_left.iter_mut().zip(max_right.iter_mut().rev()).enumerate().fold((0, 0), |(lm, rm), (idx, (x, y))| {
939+
let lmax = lm.max(height[idx]);
940+
let rmax = rm.max(height[n - 1 - idx]);
941+
*x = lmax; *y = rmax;
942+
(lmax, rmax)
943+
});
944+
height.iter().enumerate().fold(0, |acc, (idx, x)| {
945+
let h = max_left[idx].min(max_right[idx]);
946+
if h > 0 { h - x + acc } else { acc }
947+
})
948+
}
949+
}
950+
```
951+
952+
单调栈
953+
954+
```rust
955+
impl Solution {
956+
pub fn trap(height: Vec<i32>) -> i32 {
957+
let mut stack = vec![];
958+
let mut ans = 0;
959+
for (right_pos, &right_h) in height.iter().enumerate() {
960+
while !stack.is_empty() && height[*stack.last().unwrap()] <= right_h {
961+
let mid_pos = stack.pop().unwrap();
962+
if !stack.is_empty() {
963+
let left_pos = *stack.last().unwrap();
964+
let left_h = height[left_pos];
965+
let top = std::cmp::min(left_h, right_h);
966+
if top > height[mid_pos] {
967+
ans += (top - height[mid_pos]) * (right_pos - left_pos - 1) as i32;
968+
}
969+
}
970+
}
971+
stack.push(right_pos);
972+
}
973+
ans
974+
}
975+
}
976+
```
928977

929978
Rust
930979

@@ -980,3 +1029,4 @@ impl Solution {
9801029
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
9811030
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
9821031
</a>
1032+

0 commit comments

Comments
 (0)