Skip to content

Commit aa87376

Browse files
Update
1 parent 5f55278 commit aa87376

7 files changed

+60
-99
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@
125125
4. [马上秋招了,慌得很!](https://mp.weixin.qq.com/s/7q7W8Cb2-a5U5atZdOnOFA)
126126
5. [Carl看了上百份简历,总结了这些!](https://mp.weixin.qq.com/s/sJa87MZD28piCOVMFkIbwQ)
127127
6. [面试中遇到了发散性问题.....](https://mp.weixin.qq.com/s/SSonDxi2pjkSVwHNzZswng)
128+
7. [英语到底重不重要!](https://mp.weixin.qq.com/s/1PRZiyF_-TVA-ipwDNjdKw)
129+
8. [计算机专业要不要读研!](https://mp.weixin.qq.com/s/c9v1L3IjqiXtkNH7sOMAdg)
130+
9. [秋招和提前批都越来越提前了....](https://mp.weixin.qq.com/s/SNFiRDx8CKyjhTPlys6ywQ)
131+
128132

129133
## 数组
130134

problems/0051.N皇后.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -353,14 +353,6 @@ class Solution {
353353
}
354354
```
355355

356-
## 其他语言版本
357-
358-
359-
Java:
360-
361-
362-
Python:
363-
364356

365357
Go:
366358
```Go

problems/0151.翻转字符串里的单词.md

Lines changed: 23 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ https://leetcode-cn.com/problems/reverse-words-in-a-string/
1616

1717
给定一个字符串,逐个翻转字符串中的每个单词。
1818

19-
示例 1:
20-
输入: "the sky is blue"
21-
输出: "blue is sky the"
19+
示例 1:
20+
输入: "the sky is blue"
21+
输出: "blue is sky the"
2222

23-
示例 2:
24-
输入: "  hello world!  "
25-
输出: "world! hello"
26-
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
23+
示例 2:
24+
输入: "  hello world!  "
25+
输出: "world! hello"
26+
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
2727

28-
示例 3:
29-
输入: "a good   example"
30-
输出: "example good a"
31-
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
28+
示例 3:
29+
输入: "a good   example"
30+
输出: "example good a"
31+
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
3232

3333

3434
# 思路
@@ -50,12 +50,15 @@ https://leetcode-cn.com/problems/reverse-words-in-a-string/
5050
* 将整个字符串反转
5151
* 将每个单词反转
5252

53-
如动画所示:
53+
举个例子,源字符串为:"the sky is blue "
5454

55-
![151翻转字符串里的单词](https://tva1.sinaimg.cn/large/008eGmZEly1gp0kv5gl4mg30gy0c4nbp.gif)
55+
* 移除多余空格 : "the sky is blue"
56+
* 字符串反转:"eulb si yks eht"
57+
* 单词反转:"blue is sky the"
5658

5759
这样我们就完成了翻转字符串里的单词。
5860

61+
5962
思路很明确了,我们说一说代码的实现细节,就拿移除多余空格来说,一些同学会上来写如下代码:
6063

6164
```C++
@@ -80,13 +83,13 @@ void removeExtraSpaces(string& s) {
8083
8184
如果不仔细琢磨一下erase的时间复杂读,还以为以上的代码是O(n)的时间复杂度呢。
8285
83-
想一下真正的时间复杂度是多少,一个erase本来就是O(n)的操作,erase实现原理题目:[数组:就移除个元素很难么?](https://mp.weixin.qq.com/s/wj0T-Xs88_FHJFwayElQlA),最优的算法来移除元素也要O(n)。
86+
想一下真正的时间复杂度是多少,一个erase本来就是O(n)的操作,erase实现原理题目:[数组:就移除个元素很难么?](https://mp.weixin.qq.com/s/RMkulE4NIb6XsSX83ra-Ww),最优的算法来移除元素也要O(n)。
8487
8588
erase操作上面还套了一个for循环,那么以上代码移除冗余空格的代码时间复杂度为O(n^2)。
8689
8790
那么使用双指针法来去移除空格,最后resize(重新设置)一下字符串的大小,就可以做到O(n)的时间复杂度。
8891
89-
如果对这个操作比较生疏了,可以再看一下这篇文章:[数组:就移除个元素很难么?](https://mp.weixin.qq.com/s/wj0T-Xs88_FHJFwayElQlA)是如何移除元素的。
92+
如果对这个操作比较生疏了,可以再看一下这篇文章:[数组:就移除个元素很难么?](https://mp.weixin.qq.com/s/RMkulE4NIb6XsSX83ra-Ww)是如何移除元素的。
9093
9194
那么使用双指针来移除冗余空格代码如下: fastIndex走的快,slowIndex走的慢,最后slowIndex就标记着移除多余空格后新字符串的长度。
9295
@@ -122,7 +125,7 @@ void removeExtraSpaces(string& s) {
122125

123126
此时我们已经实现了removeExtraSpaces函数来移除冗余空格。
124127

125-
还做实现反转字符串的功能,支持反转字符串子区间,这个实现我们分别在[字符串:这道题目,使用库函数一行代码搞定](https://mp.weixin.qq.com/s/X02S61WCYiCEhaik6VUpFA)[字符串:简单的反转还不够!](https://mp.weixin.qq.com/s/XGSk1GyPWhfqj2g7Cb1Vgw)里已经讲过了。
128+
还做实现反转字符串的功能,支持反转字符串子区间,这个实现我们分别在[344.反转字符串](https://mp.weixin.qq.com/s/_rNm66OJVl92gBDIbGpA3w)[541.反转字符串II](https://mp.weixin.qq.com/s/pzXt6PQ029y7bJ9YZB2mVQ)里已经讲过了。
126129

127130
代码如下:
128131

@@ -135,11 +138,8 @@ void reverse(string& s, int start, int end) {
135138
}
136139
```
137140

138-
## 本题C++整体代码
139-
140-
效率:
141+
本题C++整体代码
141142

142-
<img src='https://code-thinking.cdn.bcebos.com/pics/151_%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.png' width=600> </img></div>
143143

144144
```C++
145145
// 版本一
@@ -203,6 +203,7 @@ public:
203203
return s;
204204
}
205205

206+
// 当然这里的主函数reverseWords写的有一些冗余的,可以精简一些,精简之后的主函数为:
206207
/* 主函数简单写法
207208
string reverseWords(string s) {
208209
removeExtraSpaces(s);
@@ -220,25 +221,8 @@ public:
220221
};
221222
```
222223

223-
当然这里的主函数reverseWords写的有一些冗余的,可以精简一些,精简之后的主函数为:
224-
225-
```C++
226-
// 注意这里仅仅是主函数,其他函数和版本一一致
227-
string reverseWords(string s) {
228-
removeExtraSpaces(s);
229-
reverse(s, 0, s.size() - 1);
230-
for(int i = 0; i < s.size(); i++) {
231-
int j = i;
232-
// 查找单词间的空格,翻转单词
233-
while(j < s.size() && s[j] != ' ') j++;
234-
reverse(s, i, j - 1);
235-
i = j;
236-
}
237-
return s;
238-
}
239-
```
240-
241-
224+
效率:
225+
<img src='https://code-thinking.cdn.bcebos.com/pics/151_翻转字符串里的单词.png' width=600> </img></div>
242226

243227

244228

@@ -316,7 +300,6 @@ class Solution {
316300
}
317301
```
318302

319-
Python:
320303

321304
Go:
322305

problems/0160.相交链表.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
同:[链表:链表相交](./面试题02.07.链表相交.md)

problems/剑指Offer05.替换空格.md

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/
1313

1414
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
1515

16-
示例 1:
17-
输入:s = "We are happy."
18-
输出:"We%20are%20happy."
16+
示例 1:
17+
输入:s = "We are happy."
18+
输出:"We%20are%20happy."
1919

2020
# 思路
2121

@@ -42,9 +42,9 @@ i指向新长度的末尾,j指向旧长度的末尾。
4242

4343
时间复杂度,空间复杂度均超过100%的用户。
4444

45-
<img src='https://code-thinking.cdn.bcebos.com/pics/%E5%89%91%E6%8C%87Offer05.%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC.png' width=600> </img></div>
45+
<img src='https://code-thinking.cdn.bcebos.com/pics/剑指Offer05.替换空格.png' width=600> </img></div>
4646

47-
## C++代码
47+
C++代码如下:
4848

4949
```C++
5050
class Solution {
@@ -76,17 +76,17 @@ public:
7676
};
7777

7878
```
79-
时间复杂度:O(n)
80-
空间复杂度:O(1)
79+
* 时间复杂度:O(n)
80+
* 空间复杂度:O(1)
8181
8282
此时算上本题,我们已经做了七道双指针相关的题目了分别是:
8383
84-
* [27.移除元素](https://mp.weixin.qq.com/s/wj0T-Xs88_FHJFwayElQlA)
85-
* [15.三数之和](https://mp.weixin.qq.com/s/r5cgZFu0tv4grBAexdcd8A)
86-
* [18.四数之和](https://mp.weixin.qq.com/s/nQrcco8AZJV1pAOVjeIU_g)
87-
* [206.翻转链表](https://mp.weixin.qq.com/s/pnvVP-0ZM7epB8y3w_Njwg)
88-
* [142.环形链表II](https://mp.weixin.qq.com/s/_QVP3IkRZWx9zIpQRgajzA)
89-
* [344.反转字符串](https://mp.weixin.qq.com/s/X02S61WCYiCEhaik6VUpFA)
84+
* [27.移除元素](https://mp.weixin.qq.com/s/RMkulE4NIb6XsSX83ra-Ww)
85+
* [15.三数之和](https://mp.weixin.qq.com/s/QfTNEByq1YlNSXRKEumwHg)
86+
* [18.四数之和](https://mp.weixin.qq.com/s/SBU3THi1Kv6Sar7htqCB2Q)
87+
* [206.翻转链表](https://mp.weixin.qq.com/s/ckEvIVGcNLfrz6OLOMoT0A)
88+
* [142.环形链表II](https://mp.weixin.qq.com/s/gt_VH3hQTqNxyWcl1ECSbQ)
89+
* [344.反转字符串](https://mp.weixin.qq.com/s/_rNm66OJVl92gBDIbGpA3w)
9090
9191
# 拓展
9292
@@ -121,10 +121,6 @@ for (int i = 0; i < a.size(); i++) {
121121
所以想处理字符串,我们还是会定义一个string类型。
122122
123123
124-
125-
126-
127-
128124
## 其他语言版本
129125
130126
@@ -150,8 +146,6 @@ public static String replaceSpace(StringBuffer str) {
150146
}
151147
```
152148

153-
Python:
154-
155149

156150
Go:
157151
```go

problems/剑指Offer58-II.左旋转字符串.md

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
1616
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
1717

1818

19-
示例 1:
20-
输入: s = "abcdefg", k = 2
21-
输出: "cdefgab"
19+
示例 1:
20+
输入: s = "abcdefg", k = 2
21+
输出: "cdefgab"
2222

23-
示例 2:
24-
输入: s = "lrloseumgh", k = 6
25-
输出: "umghlrlose"
23+
示例 2:
24+
输入: s = "lrloseumgh", k = 6
25+
输出: "umghlrlose"
2626

27-
限制:
28-
1 <= k < s.length <= 10000
27+
限制:
28+
1 <= k < s.length <= 10000
2929

3030
# 思路
3131

@@ -34,7 +34,7 @@ https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
3434
不能使用额外空间的话,模拟在本串操作要实现左旋转字符串的功能还是有点困难的。
3535

3636

37-
那么我们可以想一下上一题目[字符串:花式反转还不够!](https://mp.weixin.qq.com/s/X3qpi2v5RSp08mO-W5Vicw)中讲过,使用整体反转+局部反转就可以实现,反转单词顺序的目的。
37+
那么我们可以想一下上一题目[字符串:花式反转还不够!](https://mp.weixin.qq.com/s/4j6vPFHkFAXnQhmSkq2X9g)中讲过,使用整体反转+局部反转就可以实现,反转单词顺序的目的。
3838

3939
这道题目也非常类似,依然可以通过局部反转+整体反转 达到左旋转的目的。
4040

@@ -50,13 +50,13 @@ https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
5050

5151
如图:
5252

53-
<img src='https://code-thinking.cdn.bcebos.com/pics/%E5%89%91%E6%8C%87Offer58-II.%E5%B7%A6%E6%97%8B%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.png' width=600> </img></div>
53+
<img src='https://code-thinking.cdn.bcebos.com/pics/剑指Offer58-II.左旋转字符串.png' width=600> </img></div>
5454

5555
最终得到左旋2个单元的字符串:cdefgab
5656

5757
思路明确之后,那么代码实现就很简单了
5858

59-
# C++代码
59+
C++代码如下:
6060

6161
```C++
6262
class Solution {
@@ -73,15 +73,16 @@ public:
7373
7474
# 总结
7575
76+
7677
此时我们已经反转好多次字符串了,来一起回顾一下吧。
7778
78-
在这篇文章[字符串:这道题目,使用库函数一行代码搞定](https://mp.weixin.qq.com/s/X02S61WCYiCEhaik6VUpFA),第一次讲到反转一个字符串应该怎么做,使用了双指针法。
79+
在这篇文章[344.反转字符串](https://mp.weixin.qq.com/s/_rNm66OJVl92gBDIbGpA3w),第一次讲到反转一个字符串应该怎么做,使用了双指针法。
7980
80-
然后发现[字符串:简单的反转还不够!](https://mp.weixin.qq.com/s/XGSk1GyPWhfqj2g7Cb1Vgw),这里开始给反转加上了一些条件,当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。
81+
然后发现[541. 反转字符串II](https://mp.weixin.qq.com/s/pzXt6PQ029y7bJ9YZB2mVQ),这里开始给反转加上了一些条件,当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。
8182
82-
后来在[字符串:花式反转还不够!](https://mp.weixin.qq.com/s/X3qpi2v5RSp08mO-W5Vicw)中,要对一句话里的单词顺序进行反转,发现先整体反转再局部反转 是一个很妙的思路。
83+
后来在[151.翻转字符串里的单词](https://mp.weixin.qq.com/s/4j6vPFHkFAXnQhmSkq2X9g)中,要对一句话里的单词顺序进行反转,发现先整体反转再局部反转 是一个很妙的思路。
8384
84-
最后再讲到本地,本题则是先局部反转再 整体反转,与[字符串:花式反转还不够!](https://mp.weixin.qq.com/s/X3qpi2v5RSp08mO-W5Vicw)类似,但是也是一种新的思路。
85+
最后再讲到本题,本题则是先局部反转再 整体反转,与[151.翻转字符串里的单词](https://mp.weixin.qq.com/s/4j6vPFHkFAXnQhmSkq2X9g)类似,但是也是一种新的思路。
8586
8687
好了,反转字符串一共就介绍到这里,相信大家此时对反转字符串的常见操作已经很了解了。
8788
@@ -93,7 +94,6 @@ public:
9394
**如果想让这套题目有意义,就不要申请额外空间。**
9495
9596
96-
9797
## 其他语言版本
9898
9999
Java:
@@ -117,7 +117,6 @@ class Solution {
117117
}
118118
}
119119
```
120-
Python:
121120

122121
Go:
123122

@@ -151,4 +150,4 @@ func reverse(b []byte, left, right int){
151150
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
152151
* B站视频:[代码随想录](https://space.bilibili.com/525438321)
153152
* 知识星球:[代码随想录](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)
154-
<div align="center"><img src=../pics/公众号.png width=450 alt=> </img></div>
153+
<div align="center"><img src=../pics/公众号.png width=450 alt=> </img></div>

problems/栈与队列理论基础.md

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,7 @@ std::queue<int, std::list<int>> third; // 定义以list为底层容器的队列
8585

8686
所以STL 队列也不被归类为容器,而被归类为container adapter( 容器适配器)。
8787

88-
我这里讲的都是(clck)C++ 语言中情况, 使用其他语言的同学也要思考栈与队列的底层实现问题, 不要对数据结构的使用浅尝辄止,而要深挖起内部原理,才能夯实基础。
89-
90-
91-
92-
## 其他语言版本
93-
94-
95-
Java:
96-
97-
98-
Python:
99-
100-
101-
Go:
88+
我这里讲的都是C++ 语言中情况, 使用其他语言的同学也要思考栈与队列的底层实现问题, 不要对数据结构的使用浅尝辄止,而要深挖起内部原理,才能夯实基础。
10289

10390

10491

0 commit comments

Comments
 (0)