Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 2dcfe3f

Browse files
authored
Merge branch 'youngyangyang04:master' into master
2 parents 09e82fa + c3cc5fb commit 2dcfe3f

24 files changed

+1077
-227
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
> 1. **介绍**:本项目是一套完整的刷题计划,旨在帮助大家少走弯路,循序渐进学算法,[关注作者](#关于作者)
55
> 2. **PDF版本**[「代码随想录」算法精讲 PDF 版本](https://mp.weixin.qq.com/s/RsdcQ9umo09R6cfnwXZlrQ)
66
> 3. **刷题顺序** : README已经将刷题顺序排好了,按照顺序一道一道刷就可以。
7-
> 3. **学习社区** : 一起学习打卡/面试技巧/如何选择offer/大厂内推/职场规则/简历修改/技术分享/程序人生。欢迎加入[「代码随想录」学习社区](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)
7+
> 3. **学习社区** : 一起学习打卡/面试技巧/如何选择offer/大厂内推/职场规则/简历修改/技术分享/程序人生。欢迎加入[「代码随想录」知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)
88
> 4. **提交代码**:本项目统一使用C++语言进行讲解,但已经有Java、Python、Go、JavaScript等等多语言版本,感谢[这里的每一位贡献者](https://github.com/youngyangyang04/leetcode-master/graphs/contributors),如果你也想贡献代码点亮你的头像,[点击这里](https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A)了解提交代码的方式。
99
> 5. **转载须知** :以下所有文章皆为我([程序员Carl](https://github.com/youngyangyang04))的原创。引用本项目文章请注明出处,发现恶意抄袭或搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
1010
@@ -97,6 +97,8 @@
9797
* [看了这么多代码,谈一谈代码风格!](./problems/前序/代码风格.md)
9898
* [力扣上的代码想在本地编译运行?](./problems/前序/力扣上的代码想在本地编译运行?.md)
9999
* [什么是核心代码模式,什么又是ACM模式?](./problems/前序/什么是核心代码模式,什么又是ACM模式?.md)
100+
* [ACM模式如何构造二叉树](./problems/前序/ACM模式如何构建二叉树.md)
101+
* [解密互联网大厂研发流程](./problems/前序/互联网大厂研发流程.md)
100102

101103
* 工具
102104
* [一站式vim配置](https://github.com/youngyangyang04/PowerVim)
@@ -124,6 +126,11 @@
124126

125127
## 知识星球精选
126128

129+
* [HR特意刁难非科班!](./problems/知识星球精选/HR特意刁难非科班.md)
130+
* [offer的选择](./problems/知识星球精选/offer的选择.md)
131+
* [天下乌鸦一般黑,哪家没有PUA?](./problems/知识星球精选/天下乌鸦一般黑.md)
132+
* [初入大三,考研VS工作](./problems/知识星球精选/初入大三选择考研VS工作.md)
133+
* [非科班2021秋招总结](./problems/知识星球精选/非科班2021秋招总结.md)
127134
* [秋招下半场依然没offer,怎么办?](./problems/知识星球精选/秋招下半场依然没offer.md)
128135
* [合适自己的就是最好的](./problems/知识星球精选/合适自己的就是最好的.md)
129136
* [为什么都说客户端会消失](./problems/知识星球精选/客三消.md)
@@ -466,6 +473,7 @@
466473
* [234.回文链表](./problems/0234.回文链表.md)
467474
* [143.重排链表](./problems/0143.重排链表.md)【数组】【双向队列】【直接操作链表】
468475
* [141.环形链表](./problems/0141.环形链表.md)
476+
* [160.相交链表](./problems/面试题02.07.链表相交.md)
469477

470478
## 哈希表
471479
* [205.同构字符串](./problems/0205.同构字符串.md):【哈希表的应用】

problems/0035.搜索插入位置.md

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,22 @@
1818
你可以假设数组中无重复元素。
1919

2020
示例 1:
21-
输入: [1,3,5,6], 5
22-
输出: 2
21+
* 输入: [1,3,5,6], 5
22+
* 输出: 2
2323

2424
示例 2:
25-
输入: [1,3,5,6], 2
26-
输出: 1
25+
* 输入: [1,3,5,6], 2
26+
* 输出: 1
2727

2828
示例 3:
29-
输入: [1,3,5,6], 7
30-
输出: 4
29+
* 输入: [1,3,5,6], 7
30+
* 输出: 4
3131

3232
示例 4:
33-
输入: [1,3,5,6], 0
34-
输出: 0
33+
* 输入: [1,3,5,6], 0
34+
* 输出: 0
3535

36-
# 思路
36+
## 思路
3737

3838
这道题目不难,但是为什么通过率相对来说并不高呢,我理解是大家对边界处理的判断有所失误导致的。
3939

@@ -50,13 +50,13 @@
5050

5151
接下来我将从暴力的解法和二分法来讲解此题,也借此好好讲一讲二分查找法。
5252

53-
## 暴力解法
53+
### 暴力解法
5454

5555
暴力解题 不一定时间消耗就非常高,关键看实现的方式,就像是二分查找时间消耗不一定就很低,是一样的。
5656

57-
## 暴力解法C++代码
57+
C++代码
5858

59-
```
59+
```CPP
6060
class Solution {
6161
public:
6262
int searchInsert(vector<int>& nums, int target) {
@@ -75,14 +75,14 @@ public:
7575
};
7676
```
7777
78-
时间复杂度:O(n)
79-
空间复杂度:O(1)
78+
* 时间复杂度:O(n)
79+
* 空间复杂度:O(1)
8080
8181
效率如下:
8282
8383
![35_搜索插入位置](https://img-blog.csdnimg.cn/20201216232127268.png)
8484
85-
## 二分法
85+
### 二分法
8686
8787
既然暴力解法的时间复杂度是O(n),就要尝试一下使用二分查找法。
8888
@@ -108,7 +108,7 @@ public:
108108
109109
要在二分查找的过程中,保持不变量,这也就是**循环不变量** (感兴趣的同学可以查一查)。
110110
111-
## 二分法第一种写法
111+
### 二分法第一种写法
112112
113113
以这道题目来举例,以下的代码中定义 target 是在一个在左闭右闭的区间里,**也就是[left, right] (这个很重要)**。
114114
@@ -142,13 +142,13 @@ public:
142142
}
143143
};
144144
```
145-
时间复杂度:O(logn)
146-
时间复杂度:O(1)
145+
* 时间复杂度:O(logn)
146+
* 时间复杂度:O(1)
147147

148148
效率如下:
149149
![35_搜索插入位置2](https://img-blog.csdnimg.cn/2020121623272877.png)
150150

151-
## 二分法第二种写法
151+
### 二分法第二种写法
152152

153153
如果说定义 target 是在一个在左闭右开的区间里,也就是[left, right) 。
154154

@@ -185,27 +185,22 @@ public:
185185
};
186186
```
187187
188-
时间复杂度:O(logn)
189-
时间复杂度:O(1)
188+
* 时间复杂度:O(logn)
189+
* 时间复杂度:O(1)
190190
191-
# 总结
191+
## 总结
192192
193193
希望通过这道题目,大家会发现平时写二分法,为什么总写不好,就是因为对区间定义不清楚。
194194
195195
确定要查找的区间到底是左闭右开[left, right),还是左闭又闭[left, right],这就是不变量。
196196
197197
然后在**二分查找的循环中,坚持循环不变量的原则**,很多细节问题,自然会知道如何处理了。
198198
199-
**循序渐进学算法,认准「代码随想录」,Carl手把手带你过关斩将!**
200-
201-
202-
203-
204199
205200
206201
## 其他语言版本
207202
208-
Java
203+
### Java
209204
210205
```java
211206
class Solution {
@@ -251,7 +246,7 @@ func searchInsert(nums []int, target int) int {
251246
}
252247
```
253248

254-
Python
249+
### Python
255250
```python3
256251
class Solution:
257252
def searchInsert(self, nums: List[int], target: int) -> int:
@@ -269,7 +264,7 @@ class Solution:
269264
return right + 1
270265
```
271266

272-
JavaScript:
267+
### JavaScript
273268
```js
274269
var searchInsert = function (nums, target) {
275270
let l = 0, r = nums.length - 1, ans = nums.length;
@@ -289,7 +284,7 @@ var searchInsert = function (nums, target) {
289284
};
290285
```
291286

292-
Swift:
287+
### Swift
293288

294289
```swift
295290
// 暴力法

problems/0037.解数独.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
如果对回溯法理论还不清楚的同学,可以先看这个视频[视频来了!!带你学透回溯算法(理论篇)](https://mp.weixin.qq.com/s/wDd5azGIYWjbU0fdua_qBg)
1111

12-
## 37. 解数独
12+
# 37. 解数独
1313

1414
[力扣题目链接](https://leetcode-cn.com/problems/sudoku-solver/)
1515

@@ -53,7 +53,7 @@
5353
![37.解数独](https://img-blog.csdnimg.cn/2020111720451790.png)
5454

5555

56-
## 回溯三部曲
56+
### 回溯三部曲
5757

5858
* 递归函数以及参数
5959

@@ -115,7 +115,7 @@ bool backtracking(vector<vector<char>>& board) {
115115
116116
那么会直接返回, **这也就是为什么没有终止条件也不会永远填不满棋盘而无限递归下去!**
117117
118-
## 判断棋盘是否合法
118+
### 判断棋盘是否合法
119119
120120
判断棋盘是否合法有如下三个维度:
121121
@@ -150,9 +150,8 @@ bool isValid(int row, int col, char val, vector<vector<char>>& board) {
150150
}
151151
```
152152

153-
最后整体代码如下
153+
最后整体C++代码如下
154154

155-
## C++代码
156155

157156
```CPP
158157
class Solution {
@@ -218,7 +217,7 @@ public:
218217
## 其他语言版本
219218
220219
221-
Java
220+
### Java
222221
```java
223222
class Solution {
224223
public void solveSudoku(char[][] board) {
@@ -286,7 +285,7 @@ class Solution {
286285
}
287286
```
288287

289-
Python
288+
### Python
290289
```python3
291290
class Solution:
292291
def solveSudoku(self, board: List[List[str]]) -> None:
@@ -329,7 +328,7 @@ class Solution:
329328
return True
330329
```
331330

332-
Go:
331+
### Go
333332

334333
```go
335334
func solveSudoku(board [][]byte) {
@@ -386,7 +385,7 @@ func isvalid(row,col int,k byte,board [][]byte)bool{
386385

387386

388387

389-
Javascript:
388+
### Javascript
390389
```Javascript
391390
var solveSudoku = function(board) {
392391
function isValid(row, col, val, board) {
@@ -442,7 +441,7 @@ var solveSudoku = function(board) {
442441
};
443442
```
444443

445-
C:
444+
### C
446445

447446
```C
448447
bool isValid(char** board, int row, int col, int k) {

problems/0046.全排列.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
88

99

10-
## 46.全排列
10+
# 46.全排列
1111

1212
[力扣题目链接](https://leetcode-cn.com/problems/permutations/)
1313

1414
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
1515

1616
示例:
17-
输入: [1,2,3]
18-
输出:
17+
* 输入: [1,2,3]
18+
* 输出:
1919
[
2020
[1,2,3],
2121
[1,3,2],
@@ -42,7 +42,7 @@
4242

4343
![46.全排列](https://img-blog.csdnimg.cn/20201209174225145.png)
4444

45-
## 回溯三部曲
45+
### 回溯三部曲
4646

4747
* 递归函数参数
4848

@@ -105,7 +105,6 @@ for (int i = 0; i < nums.size(); i++) {
105105

106106
整体C++代码如下:
107107

108-
109108
```CPP
110109
class Solution {
111110
public:
@@ -148,8 +147,8 @@ public:
148147
149148
## 其他语言版本
150149
150+
### Java
151151
152-
Java:
153152
```java
154153
class Solution {
155154
@@ -182,7 +181,8 @@ class Solution {
182181
}
183182
}
184183
}
185-
```
184+
```
185+
186186
```java
187187
// 解法2:通过判断path中是否存在数字,排除已经选择的数字
188188
class Solution {
@@ -210,9 +210,9 @@ class Solution {
210210
}
211211
```
212212

213-
Python
213+
### Python
214214
**回溯**
215-
```python3
215+
```python
216216
class Solution:
217217
def __init__(self):
218218
self.path = []
@@ -275,7 +275,7 @@ class Solution:
275275
self.path.pop()
276276
```
277277

278-
Go:
278+
### Go
279279
```Go
280280
var res [][]int
281281
func permute(nums []int) [][]int {
@@ -302,7 +302,7 @@ func backTrack(nums []int,numsLen int,path []int) {
302302

303303
```
304304

305-
Javascript:
305+
### Javascript
306306

307307
```js
308308

0 commit comments

Comments
 (0)