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

[pull] master from youngyangyang04:master #318

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
pull merged 17 commits into AlgorithmAndLeetCode:master from youngyangyang04:master
Jul 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
e5d694d
Update
youngyangyang04 Jul 19, 2023
9b3c234
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
youngyangyang04 Jul 19, 2023
b3d1a88
Update 0503.下一个更大元素II.md
Ainevsia Jul 8, 2023
f3f549d
Update 0042.接雨水.md
Ainevsia Jul 8, 2023
7aa2a3e
Update 0084.柱状图中最大的矩形.md
Ainevsia Jul 9, 2023
0dc6bb5
添加59.螺旋矩阵II Ruby实现
niuli1991 Jul 25, 2023
7c9fcfe
更新 时间复杂度 O(n)超时 拍版格式修复
jinbudaily Jul 27, 2023
e0c5da7
更新 单调栈系列题目 排版格式修复
jinbudaily Jul 27, 2023
dc9fb7c
更新 数组额外题目 排版格式修复
jinbudaily Jul 27, 2023
56f3780
更新 哈希表额外题目 排版格式修复
jinbudaily Jul 27, 2023
bbb2a60
更新 二叉树额外题目 排版格式修复
jinbudaily Jul 27, 2023
e9b0d46
更新 贪心与动态规划 额外题目 排版格式修复
jinbudaily Jul 27, 2023
a5eb340
更新 图论 并查集 模拟 位运算 额外题目 排版格式修复
jinbudaily Jul 27, 2023
e7c1224
合并修改 0503.下一个更大元素II
jinbudaily Jul 27, 2023
9693ad4
Update
youngyangyang04 Jul 27, 2023
4037eb6
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
youngyangyang04 Jul 27, 2023
4f632c8
Merge pull request #2211 from jinbudaily/master
youngyangyang04 Jul 27, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 7 additions & 18 deletions README.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
> 1. **介绍** :本项目是一套完整的刷题计划,旨在帮助大家少走弯路,循序渐进学算法,[关注作者](#关于作者)
> 2. **正式出版** :[《代码随想录》](https://programmercarl.com/other/publish.html) 。
> 3. **PDF版本** :[「代码随想录」算法精讲 PDF 版本](https://programmercarl.com/other/algo_pdf.html) 。
> 4. **算法公开课** :[《代码随想录》算法视频公开课](https://www.bilibili.com/video/BV1fA4y1o715) 。
> 4. **算法公开课** :[《代码随想录》算法视频公开课](https://www.programmercarl.com/other/gongkaike.html) 。
> 5. **最强八股文** :[代码随想录知识星球精华PDF](https://www.programmercarl.com/other/kstar_baguwen.html) 。
> 6. **刷题顺序** :README已经将刷题顺序排好了,按照顺序一道一道刷就可以。
> 7. **学习社区** :一起学习打卡/面试技巧/如何选择offer/大厂内推/职场规则/简历修改/技术分享/程序人生。欢迎加入[「代码随想录」知识星球](https://programmercarl.com/other/kstar.html) 。
> 8. **提交代码** :本项目统一使用C++语言进行讲解,但已经有Java、Python、Go、JavaScript等等多语言版本,感谢[这里的每一位贡献者](https://github.com/youngyangyang04/leetcode-master/graphs/contributors),如果你也想贡献代码点亮你的头像,[点击这里](https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A)了解提交代码的方式。
> 8. **提交代码** :本项目统一使用C++语言进行讲解,但已经有Java、Python、Go、JavaScript等等多语言版本,感谢[这里的每一位贡献者](https://github.com/youngyangyang04/leetcode-master/graphs/contributors),如果你也想贡献代码点亮你的头像,[点击这里](https://www.programmercarl.com/qita/join.html)了解提交代码的方式。
> 9. **转载须知** :以下所有文章皆为我([程序员Carl](https://github.com/youngyangyang04))的原创。引用本项目文章请注明出处,发现恶意抄袭或搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!


Expand Down Expand Up @@ -51,19 +51,12 @@

## 如何使用该刷题攻略

电脑端还看不到留言,大家可以在公众号[「代码随想录」](https://img-blog.csdnimg.cn/20201124161234338.png),左下角有「刷题攻略」,这是手机版刷题攻略,看完就会发现有很多录友(代码随想录的朋友们)在文章下留言打卡,这份刷题顺序和题解已经陪伴了上万录友了,同时也说明文章的质量是经过上万人的考验!

欢迎每一位学习算法的小伙伴加入到这个学习阵营来!

**目前已经更新了,数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心,八个专题了,正在讲解动态规划!**
按照先面的排列顺序,从数组开始刷起就可以了,顺序都安排好了,按顺序刷就好。

在刷题攻略中,每个专题开始都有理论基础篇,并不像是教科书般的理论介绍,而是从实战中归纳需要的基础知识。每个专题结束都有总结篇,最这个专题的归纳总结。

如果你是算法老手,这篇攻略也是复习的最佳资料,如果把每个系列对应的总结篇,快速过一遍,整个算法知识体系以及各种解法就重现脑海了。


目前「代码随想录」刷题攻略更新了:**200多篇文章,精讲了200道经典算法题目,共60w字的详细图解,大部分题目都搭配了20分钟左右的视频讲解**,视频质量很好,口碑很好,大家可以去看看,视频列表:[代码随想录视频讲解](https://www.bilibili.com/video/BV1fA4y1o715)。

**这里每一篇题解,都是精品,值得仔细琢磨**。

我在题目讲解中统一使用C++,但你会发现下面几乎每篇题解都配有其他语言版本,Java、Python、Go、JavaScript等等,正是这些[热心小伙们](https://github.com/youngyangyang04/leetcode-master/graphs/contributors)贡献的代码,当然我也会严格把控代码质量。
Expand Down Expand Up @@ -100,14 +93,11 @@
* [程序员应该用什么用具来写文档?](./problems/前序/程序员写文档工具.md)

* 求职
* [ACM模式练习网站,卡码网](https://kamacoder.com/)
* [程序员的简历应该这么写!!(附简历模板)](./problems/前序/程序员简历.md)
* [【专业技能】应该这样写!](https://programmercarl.com/other/jianlizhuanye.html)
* [【项目经历】应该这样写!](https://programmercarl.com/other/jianlixiangmu.html)
* [BAT级别技术面试流程和注意事项都在这里了](./problems/前序/BAT级别技术面试流程和注意事项都在这里了.md)
* [北京有这些互联网公司,你都知道么?](./problems/前序/北京互联网公司总结.md)
* [上海有这些互联网公司,你都知道么?](./problems/前序/上海互联网公司总结.md)
* [深圳有这些互联网公司,你都知道么?](./problems/前序/深圳互联网公司总结.md)
* [广州有这些互联网公司,你都知道么?](./problems/前序/广州互联网公司总结.md)
* [成都有这些互联网公司,你都知道么?](./problems/前序/成都互联网公司总结.md)
* [杭州有这些互联网公司,你都知道么?](./problems/前序/杭州互联网公司总结.md)

* 算法性能分析
* [关于时间复杂度,你不知道的都在这里!](./problems/前序/关于时间复杂度,你不知道的都在这里!.md)
Expand Down Expand Up @@ -506,7 +496,7 @@

# 关于作者

大家好,我是程序员Carl,哈工大师兄,《代码随想录》作者,先后在腾讯和百度从事后端技术研发,CSDN博客专家。对算法和C++后端技术有一定的见解,利用工作之余重新刷leetcode。
大家好,我是程序员Carl,哈工大师兄,《代码随想录》作者,先后在腾讯和百度从事后端技术研发。对算法和C++后端技术有一定的见解,利用工作之余重新刷leetcode。

加入「代码随想录」刷题小分队(微信群),可以扫下方二维码,加代码随想录客服微信。

Expand All @@ -527,4 +517,3 @@
<div align="center"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20211026122841.png" data-img="1" width="650" height="500"></img></div>


<!-- 24. [贪心算法:714.买卖股票的最佳时机含手续费](./problems/0714.买卖股票的最佳时机含手续费.md) -->
23 changes: 12 additions & 11 deletions problems/0005.最长回文子串.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,17 @@
* 输出:"a"


# 思路
## 思路

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

## 暴力解法
### 暴力解法

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

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

## 动态规划
### 动态规划

动规五部曲:

Expand Down Expand Up @@ -208,7 +208,7 @@ public:
* 时间复杂度:O(n^2)
* 空间复杂度:O(n^2)

## 双指针
### 双指针

动态规划的空间复杂度是偏高的,我们再看一下双指针法。

Expand Down Expand Up @@ -258,9 +258,9 @@ public:



# 其他语言版本
## 其他语言版本

Java:
### Java:

```java
// 双指针 动态规划
Expand Down Expand Up @@ -327,7 +327,7 @@ class Solution {
}
```

Python:
### Python:

```python
class Solution:
Expand Down Expand Up @@ -377,7 +377,7 @@ class Solution:
return s[start:end]

```
Go:
### Go:

```go
func longestPalindrome(s string) string {
Expand Down Expand Up @@ -411,7 +411,7 @@ func longestPalindrome(s string) string {

```

JavaScript:
### JavaScript:

```js
//动态规划解法
Expand Down Expand Up @@ -527,7 +527,7 @@ var longestPalindrome = function(s) {
};
```

C:
### C:

动态规划:
```c
Expand Down Expand Up @@ -615,7 +615,7 @@ char * longestPalindrome(char * s){
}
```

C#:
### C#:

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

13 changes: 7 additions & 6 deletions problems/0031.下一个排列.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
* 输出:[1]


# 思路
## 思路

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

Expand Down Expand Up @@ -92,9 +92,9 @@ public:
};
```

# 其他语言版本
## 其他语言版本

## Java
### Java

```java
class Solution {
Expand Down Expand Up @@ -159,7 +159,7 @@ class Solution {
}
```

## Python
### Python
>直接使用sorted()会开辟新的空间并返回一个新的list,故补充一个原地反转函数
```python
class Solution:
Expand Down Expand Up @@ -191,7 +191,7 @@ class Solution:
"""
```

## Go
### Go

```go
//卡尔的解法
Expand All @@ -216,7 +216,7 @@ func reverse(a []int,begin,end int){
}
```

## JavaScript
### JavaScript

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

66 changes: 58 additions & 8 deletions problems/0042.接雨水.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* 输出:9


# 思路
## 思路

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

Expand All @@ -39,7 +39,7 @@
* 动态规划
* 单调栈

## 暴力解法
### 暴力解法

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

Expand Down Expand Up @@ -137,7 +137,7 @@ public:

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

## 双指针优化
### 双指针优化


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

## 单调栈解法
### 单调栈解法

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

Expand All @@ -194,7 +194,7 @@ public:

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

### 准备工作
#### 准备工作

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

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

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

### 单调栈处理逻辑
#### 单调栈处理逻辑

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

Expand Down Expand Up @@ -596,7 +596,7 @@ class Solution:

```

### Go
### Go:

```go
func trap(height []int) int {
Expand Down Expand Up @@ -802,7 +802,7 @@ var trap = function(height) {
};
```

### TypeScript
### TypeScript:

暴力解法:

Expand Down Expand Up @@ -925,6 +925,55 @@ int trap(int* height, int heightSize) {
* 时间复杂度 O(n)
* 空间复杂度 O(1)

### Rust:

双指针

```rust
impl Solution {
pub fn trap(height: Vec<i32>) -> i32 {
let n = height.len();
let mut max_left = vec![0; height.len()];
let mut max_right = vec![0; height.len()];
max_left.iter_mut().zip(max_right.iter_mut().rev()).enumerate().fold((0, 0), |(lm, rm), (idx, (x, y))| {
let lmax = lm.max(height[idx]);
let rmax = rm.max(height[n - 1 - idx]);
*x = lmax; *y = rmax;
(lmax, rmax)
});
height.iter().enumerate().fold(0, |acc, (idx, x)| {
let h = max_left[idx].min(max_right[idx]);
if h > 0 { h - x + acc } else { acc }
})
}
}
```

单调栈

```rust
impl Solution {
pub fn trap(height: Vec<i32>) -> i32 {
let mut stack = vec![];
let mut ans = 0;
for (right_pos, &right_h) in height.iter().enumerate() {
while !stack.is_empty() && height[*stack.last().unwrap()] <= right_h {
let mid_pos = stack.pop().unwrap();
if !stack.is_empty() {
let left_pos = *stack.last().unwrap();
let left_h = height[left_pos];
let top = std::cmp::min(left_h, right_h);
if top > height[mid_pos] {
ans += (top - height[mid_pos]) * (right_pos - left_pos - 1) as i32;
}
}
}
stack.push(right_pos);
}
ans
}
}
```

Rust

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

Loading

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