Skip to content

Commit

Permalink
Merge branch 'master' into patch-51
Browse files Browse the repository at this point in the history
  • Loading branch information
youngyangyang04 committed Aug 4, 2023
2 parents aaa8cc2 + e23099f commit 00dbf43
Show file tree
Hide file tree
Showing 166 changed files with 2,264 additions and 1,288 deletions.
25 changes: 7 additions & 18 deletions README.md
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) -->
5 changes: 3 additions & 2 deletions problems/0001.两数之和.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ class Solution:
for index, value in enumerate(nums):
if target - value in records: # 遍历当前元素,并在map中寻找是否有匹配的key
return [records[target- value], index]
records[value] = index # 遍历当前元素,并在map中寻找是否有匹配的key
records[value] = index # 如果没找到匹配对,就把访问过的元素和下标加入到map中
return []
```
(版本二)使用集合
Expand Down Expand Up @@ -318,7 +318,7 @@ function twoSum(nums: number[], target: number): number[] {
};
```

### php:
### PhP:

```php
function twoSum(array $nums, int $target): array
Expand Down Expand Up @@ -501,3 +501,4 @@ int* twoSum(int* nums, int numsSize, int target, int* returnSize){
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
</a>

23 changes: 12 additions & 11 deletions problems/0005.最长回文子串.md
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>

36 changes: 17 additions & 19 deletions problems/0017.电话号码的字母组合.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@

说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

# 算法公开课
## 算法公开课

**《代码随想录》算法视频公开课:[还得用回溯算法!| LeetCode:17.电话号码的字母组合](https://www.bilibili.com/video/BV1yV4y1V7Ug),相信结合视频再看本篇题解,更有助于大家对本题的理解**
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)[还得用回溯算法!| LeetCode:17.电话号码的字母组合](https://www.bilibili.com/video/BV1yV4y1V7Ug),相信结合视频再看本篇题解,更有助于大家对本题的理解**


# 思路
## 思路

从示例上来说,输入"23",最直接的想法就是两层for循环遍历了吧,正好把组合的情况都输出了。

Expand All @@ -40,7 +40,7 @@
2. 两个字母就两个for循环,三个字符我就三个for循环,以此类推,然后发现代码根本写不出来
3. 输入1 * #按键等等异常情况

## 数字和字母如何映射
### 数字和字母如何映射

可以使用map或者定义一个二维数组,例如:string letterMap[10],来做映射,我这里定义一个二维数组,代码如下:

Expand All @@ -59,7 +59,7 @@ const string letterMap[10] = {
};
```

## 回溯法来解决n个for循环的问题
### 回溯法来解决n个for循环的问题

对于回溯法还不了解的同学看这篇:[关于回溯算法,你该了解这些!](https://programmercarl.com/回溯算法理论基础.html)

Expand Down Expand Up @@ -134,9 +134,6 @@ for (int i = 0; i < letters.size(); i++) {

**但是要知道会有这些异常,如果是现场面试中,一定要考虑到!**


## C++代码

关键地方都讲完了,按照[关于回溯算法,你该了解这些!](https://programmercarl.com/回溯算法理论基础.html)中的回溯法模板,不难写出如下C++代码:


Expand Down Expand Up @@ -233,18 +230,18 @@ public:

所以大家可以按照版本一来写就可以了。

# 总结
## 总结

本篇将题目的三个要点一一列出,并重点强调了和前面讲解过的[77. 组合](https://programmercarl.com/0077.组合.html)[216.组合总和III](https://programmercarl.com/0216.组合总和III.html)的区别,本题是多个集合求组合,所以在回溯的搜索过程中,都有一些细节需要注意的。

其实本题不算难,但也处处是细节,大家还要自己亲自动手写一写。



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


## Java
### Java
```Java
class Solution {

Expand Down Expand Up @@ -286,7 +283,7 @@ class Solution {
}
```

## Python
### Python
回溯
```python
class Solution:
Expand Down Expand Up @@ -435,7 +432,7 @@ class Solution:



## Go
### Go

主要在于递归中传递下一个数字

Expand Down Expand Up @@ -470,7 +467,7 @@ func dfs(digits string, start int) {
}
```

## javaScript
### JavaScript

```js
var letterCombinations = function(digits) {
Expand All @@ -497,7 +494,7 @@ var letterCombinations = function(digits) {
};
```

## TypeScript
### TypeScript

```typescript
function letterCombinations(digits: string): string[] {
Expand Down Expand Up @@ -531,7 +528,7 @@ function letterCombinations(digits: string): string[] {
};
```

## Rust
### Rust

```Rust
const map: [&str; 10] = [
Expand Down Expand Up @@ -563,7 +560,7 @@ impl Solution {
}
```

## C
### C

```c
char* path;
Expand Down Expand Up @@ -625,7 +622,7 @@ char ** letterCombinations(char * digits, int* returnSize){
}
```
## Swift
### Swift
```swift
func letterCombinations(_ digits: String) -> [String] {
Expand Down Expand Up @@ -666,7 +663,7 @@ func letterCombinations(_ digits: String) -> [String] {
}
```

## Scala:
### Scala

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

9 changes: 5 additions & 4 deletions problems/0027.移除元素.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,10 @@ public:

## 相关题目推荐

* 26.删除排序数组中的重复项
* 283.移动零
* 844.比较含退格的字符串
* 977.有序数组的平方
* [26.删除排序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)
* [283.移动零](https://leetcode.cn/problems/move-zeroes/)
* [844.比较含退格的字符串](https://leetcode.cn/problems/backspace-string-compare/)
* [977.有序数组的平方](https://leetcode.cn/problems/squares-of-a-sorted-array/)

## 其他语言版本

Expand Down Expand Up @@ -444,3 +444,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
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>

Loading

0 comments on commit 00dbf43

Please sign in to comment.