Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
97cd84d
Create 0093.复原IP地址.md
zcxzcxzcx Jan 2, 2022
35bbec3
Update
youngyangyang04 Jan 17, 2022
2d22dc7
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
youngyangyang04 Jan 17, 2022
850939e
添加链表理论基础 python go版本
leeeeeeewii Jan 19, 2022
e0c6492
添加(0028.实现strStr.md):增加typescript版本
xiaofei-2020 Jan 20, 2022
59c95ff
添加 0343.整数拆分.md C语言解法
KingArthur0205 Jan 20, 2022
7aba93c
添加(0459.重复的子字符串.md):增加typescript版本
xiaofei-2020 Jan 20, 2022
02fd6b8
添加257. 二叉树的所有路径 Swift 版本
YDLIN Jan 21, 2022
d29fa29
添加(0232.用栈实现队列.md):增加typescript版本
xiaofei-2020 Jan 21, 2022
7037fb2
添加(0225.用队列实现栈.md):增加typescript版本
xiaofei-2020 Jan 21, 2022
f54af7f
添加(0020.有效的括号.md):增加typescript版本
xiaofei-2020 Jan 21, 2022
61b0dde
Update 0031.下一个排列.md
coolcty Jan 21, 2022
166fd85
Merge branch 'youngyangyang04:master' into master
YDLIN Jan 22, 2022
2ec4867
添加 404. 左叶子之和 Swift 版本
YDLIN Jan 22, 2022
26c7fd2
添加 513. 找树左下角的值 Swift 版本
YDLIN Jan 22, 2022
2f6aa72
添加(1047.删除字符串中的所有相邻重复项.md):增加typescript版本
xiaofei-2020 Jan 22, 2022
4efa544
Merge branch 'youngyangyang04:master' into remote
KingArthur0205 Jan 22, 2022
2b33b45
添加 0096.不同的二叉搜索树.md C语言解法
KingArthur0205 Jan 22, 2022
718e67a
修改 0096.不同的二叉搜索树.md C语言解法注释错别字
KingArthur0205 Jan 22, 2022
3fb9236
添加(0150.逆波兰表达式求值.md):增加typescript版本
xiaofei-2020 Jan 22, 2022
b3078ef
Update 0435.无重叠区间.md
fengxiuyang Jan 23, 2022
954f291
Merge branch 'youngyangyang04:master' into master
YDLIN Jan 24, 2022
0072884
添加 0112.路径总和、0113.路径总和 II Swift 版本
YDLIN Jan 24, 2022
ac9f8c6
添加(0239.滑动窗口最大值.md):增加typescript版本
xiaofei-2020 Jan 24, 2022
a12ad31
修改(0239.滑动窗口最大值.md):规范化js版本
xiaofei-2020 Jan 24, 2022
454d50c
Merge branch 'youngyangyang04:master' into remote
KingArthur0205 Jan 24, 2022
3567bd7
Merge branch 'youngyangyang04:master' into master
YDLIN Jan 24, 2022
9272063
添加 0654. 最大二叉树 Swift 版本
YDLIN Jan 24, 2022
fee948b
添加 0005.最长回文子串.md C语言解法
KingArthur0205 Jan 24, 2022
60c3a27
添加(0347.前K个高频元素.md):增加typescript版本
xiaofei-2020 Jan 24, 2022
de37c44
添加(二叉树理论基础.md):增加typescript版本
xiaofei-2020 Jan 24, 2022
a488a34
添加(二叉树的递归遍历.md):增加typescript版本
xiaofei-2020 Jan 24, 2022
fec8e08
添加(二叉树的递归遍历.md):删除多余的js版本
xiaofei-2020 Jan 24, 2022
1efb77e
优化 0112.路径总和 Go版本解法
Jan 25, 2022
ed06ac6
Merge branch 'youngyangyang04:master' into remote
KingArthur0205 Jan 25, 2022
3a46ffd
添加 0005.最长回文子串.md C语言双指针解法
KingArthur0205 Jan 25, 2022
d40a15e
添加(二叉树的迭代遍历.md):增加typescript版本
xiaofei-2020 Jan 26, 2022
9d09b11
添加 0143.重排链表.md C语言解法
KingArthur0205 Jan 26, 2022
d01fb8c
Merge branch 'youngyangyang04:master' into remote
KingArthur0205 Jan 26, 2022
7ed2a3a
添加(二叉树的统一迭代法.md):增加typescript版本
xiaofei-2020 Jan 26, 2022
8782315
添加(0102.二叉树的层序遍历.md & 107.二叉树的层次遍历 II):增加typescript版本
xiaofei-2020 Jan 26, 2022
bb02fb9
添加 0052.N皇后II.md C语言解法
KingArthur0205 Jan 26, 2022
a2ee957
Merge branch 'master' into master
YDLIN Jan 27, 2022
7a0f347
Merge branch 'youngyangyang04:master' into remote
KingArthur0205 Jan 27, 2022
023ec69
添加 0129.求根到叶子节点数字之和.md C语言解法
KingArthur0205 Jan 27, 2022
7fe4ea3
Add 0209.长度最小的子数组.md C语言解法
KingArthur0205 Jan 27, 2022
e177bca
添加(199.二叉树的右视图):增加typescript版本
xiaofei-2020 Jan 27, 2022
daf710b
添加(637.二叉树的层平均值):增加typescript版本
xiaofei-2020 Jan 28, 2022
2862d47
添加(429.N叉树的层序遍历):增加typescript版本
xiaofei-2020 Jan 28, 2022
9329ecf
添加(515.在每个树行中找最大值):增加typescript版本
xiaofei-2020 Jan 28, 2022
992cd6d
添加(116.填充每个节点的下一个右侧节点指针):增加typescript版本
xiaofei-2020 Jan 28, 2022
d1abb0c
添加(117.填充每个节点的下一个右侧节点指针II):增加typescript版本
xiaofei-2020 Jan 28, 2022
bdb0954
添加(104.二叉树的最大深度):增加typescript版本
xiaofei-2020 Jan 28, 2022
626db3f
添加(111.二叉树的最小深度):增加typescript版本
xiaofei-2020 Jan 28, 2022
f90e079
Merge branch 'youngyangyang04:master' into master
YDLIN Jan 29, 2022
be3f2cf
添加(0226.翻转二叉树.md):增加typescript版本
xiaofei-2020 Jan 29, 2022
cee8536
添加(0101.对称二叉树.md):增加typescript版本
xiaofei-2020 Jan 30, 2022
1f69827
Merge pull request #1040 from leeeeeeewii/linkedlist
youngyangyang04 Jan 30, 2022
d300529
Merge pull request #1042 from xiaofei-2020/str6
youngyangyang04 Jan 30, 2022
7fb1417
Merge branch 'youngyangyang04:master' into master
fengxiuyang Jan 31, 2022
067f71c
更新 背包问题理论基础完全背包.md Java版本
fengxiuyang Jan 31, 2022
4342a2f
Merge pull request #1 from zhicheng-lee/zhicheng-lee-patch-1
fengxiuyang Jan 31, 2022
46571a3
添加(0104.二叉树的最大深度.md):增加typescript版本
xiaofei-2020 Jan 31, 2022
463f142
添加(559.n叉树的最大深度):增加typescript版本
xiaofei-2020 Jan 31, 2022
1991e49
Merge branch 'youngyangyang04:master' into master
YDLIN Feb 1, 2022
e4f674c
添加(0111.二叉树的最小深度.md):增加typescript版本
xiaofei-2020 Feb 1, 2022
8ac7cdc
添加(0045.跳跃游戏II.md):补充Java版本2
hutbzc Feb 1, 2022
40c0615
添加(0139.单词拆分.md):增加Java回回溯+记忆化版本
hutbzc Feb 1, 2022
5a2ff02
修改(0376.摆动序列.md):修改了逻辑小错误
hutbzc Feb 1, 2022
2f1c56e
494题python代码修正
Xiaofei-fei Feb 2, 2022
ac036ad
Merge pull request #1043 from KingArthur0205/remote
youngyangyang04 Feb 2, 2022
bfdfee9
Merge pull request #1044 from xiaofei-2020/str7
youngyangyang04 Feb 2, 2022
38c8b68
添加(0222.完全二叉树的节点个数.md):增加typescript版本
xiaofei-2020 Feb 3, 2022
04fa7af
Merge pull request #1045 from YDLIN/master
youngyangyang04 Feb 4, 2022
ea5a011
添加(0110.平衡二叉树.md):增加typescript版本
xiaofei-2020 Feb 5, 2022
4bc6f2b
Merge pull request #1048 from xiaofei-2020/stack3
youngyangyang04 Feb 5, 2022
08e226b
Merge pull request #1049 from xiaofei-2020/stack4
youngyangyang04 Feb 6, 2022
f9e5bce
添加 面试题02.07.链表相交.md JavaScript语言解法的注释
jobinben Feb 6, 2022
343ddb3
1047.删除字符串中的所有相邻重复项:优化Swift版本实现
bqlin Dec 20, 2021
2aa31ce
0239.滑动窗口最大值:优化排版,补充Swift版本
bqlin Dec 20, 2021
40dc0d5
栈与队列总结:优化排版
bqlin Dec 20, 2021
c88aee1
二叉树理论基础:优化排版
bqlin Dec 21, 2021
be6c45c
添加 0110.平衡二叉树.md JavaScript语言版本的迭代解法
jobinben Feb 6, 2022
f1a3fbc
Update 0110.平衡二叉树.md
Anmizi Feb 6, 2022
2cf8d59
Merge pull request #1050 from coolcty/patch-1
youngyangyang04 Feb 7, 2022
8ce8796
添加 二叉树:以为使用了递归,其实还隐藏着回溯 Swift版本
qxuewei Feb 7, 2022
6712105
Merge branch 'youngyangyang04:master' into master
jobinben Feb 7, 2022
3aa54bf
343整数拆分,更新第二层循环 j 的范围
LightSeeker6 Feb 7, 2022
1b7c86e
添加(0257.二叉树的所有路径.md):增加typescript版本
xiaofei-2020 Feb 7, 2022
47818c9
添加(二叉树中递归带着回溯.md):增加相同的树typescript版本
xiaofei-2020 Feb 8, 2022
6de0432
Merge pull request #1046 from xiaofei-2020/stack2
youngyangyang04 Feb 8, 2022
b8143fc
Merge pull request #1051 from xiaofei-2020/stack5
youngyangyang04 Feb 8, 2022
49a1a42
添加(二叉树中递归带着回溯.md):增加二叉树的不同路径的typescript版本
xiaofei-2020 Feb 8, 2022
f222a40
Merge pull request #1052 from xiaofei-2020/stack6
youngyangyang04 Feb 8, 2022
f604aea
添加(0404.左叶子之和.md):增加typescript版本
xiaofei-2020 Feb 8, 2022
b0f0dd7
Merge branch 'youngyangyang04:master' into master
Anmizi Feb 9, 2022
a8f664a
Merge pull request #1054 from zhicheng-lee/master
youngyangyang04 Feb 9, 2022
2165568
Merge pull request #1055 from xiaofei-2020/stack7
youngyangyang04 Feb 9, 2022
3443ba4
Merge branch 'youngyangyang04:master' into master
Anmizi Feb 9, 2022
81c1060
Update
youngyangyang04 Feb 9, 2022
beeff54
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
youngyangyang04 Feb 9, 2022
4ed65b5
添加(0513.找树左下角的值.md):增加typescript版本
xiaofei-2020 Feb 9, 2022
7d8e9e8
Update 0701.二叉搜索树中的插入操作.md
guang-hou Feb 9, 2022
28465fa
Merge pull request #1056 from xiaofei-2020/stack8
youngyangyang04 Feb 10, 2022
0be65ec
Merge pull request #1057 from xiaofei-2020/tree1
youngyangyang04 Feb 10, 2022
4596847
Merge pull request #1058 from xiaofei-2020/tree2
youngyangyang04 Feb 10, 2022
fc1a7e3
Update 0027.移除元素.md
zhaoninge Feb 10, 2022
71dd3ea
0059 螺旋矩阵II 题目错误纠正
Jerry-306 Feb 11, 2022
305ef69
更新:0015.三数之和,0018.四数之和(去重优化)
weiting-cn Feb 11, 2022
fbf52ee
算法模板新增 typescript 版本代码
Jerry-306 Feb 11, 2022
65a341b
Update 广州互联网公司总结.md
g10guang Feb 11, 2022
961ae6e
添加(0112.路径总和.md):增加typescript版本
xiaofei-2020 Feb 11, 2022
fde074c
添加(0112.路径总和 ii):增加typescript版本
xiaofei-2020 Feb 11, 2022
f2c1702
Merge branch 'youngyangyang04:master' into master
LightSeeker6 Feb 12, 2022
98b137e
Merge pull request #1061 from zucong/master
youngyangyang04 Feb 15, 2022
48ce0d5
Merge pull request #1063 from xiaofei-2020/tree4
youngyangyang04 Feb 15, 2022
ee28822
Merge pull request #1064 from xiaofei-2020/tree5
youngyangyang04 Feb 15, 2022
86a9d57
Merge pull request #1065 from Younglesszzz/master
youngyangyang04 Feb 15, 2022
0ddbf64
Merge pull request #1067 from xiaofei-2020/tree6
youngyangyang04 Feb 16, 2022
1dad8a6
Merge pull request #1068 from xiaofei-2020/tree8
youngyangyang04 Feb 16, 2022
58da227
Merge pull request #1069 from xiaofei-2020/tree9
youngyangyang04 Feb 17, 2022
742ccc4
Merge pull request #1070 from xiaofei-2020/tree10
youngyangyang04 Feb 17, 2022
292942d
Merge pull request #1071 from hutbzc/master
youngyangyang04 Feb 17, 2022
9e65340
Merge pull request #1072 from Xiaofei-fei/master
youngyangyang04 Feb 17, 2022
24e57b8
Merge pull request #1073 from xiaofei-2020/tree11
youngyangyang04 Feb 17, 2022
de3fa62
Merge pull request #1074 from xiaofei-2020/tree12
youngyangyang04 Feb 18, 2022
b013f3d
Merge branch 'master' into master
youngyangyang04 Feb 18, 2022
5775f12
Merge pull request #1075 from jobinben/master
youngyangyang04 Feb 18, 2022
266702c
Update
youngyangyang04 Feb 18, 2022
b2c21f2
Merge pull request #1076 from bqlin/master
youngyangyang04 Feb 19, 2022
f0800ec
Merge pull request #1077 from Anmizi/master
youngyangyang04 Feb 19, 2022
e3e59dc
Merge branch 'youngyangyang04:master' into master
Jerry-306 Feb 21, 2022
b07dba4
Merge pull request #1078 from qxuewei/master
youngyangyang04 Feb 21, 2022
1810a9a
Merge branch 'youngyangyang04:master' into master
Jerry-306 Feb 23, 2022
5c34fe5
Merge branch 'youngyangyang04:master' into master
weiting-cn Feb 24, 2022
3652d00
0104 二叉树最大深度 部分代码书写错误纠正
Jerry-306 Feb 24, 2022
14f91a5
0404 左叶子之和 左叶子定义错误
Jerry-306 Feb 25, 2022
1a32553
Merge pull request #1079 from yp2020/master
youngyangyang04 Feb 26, 2022
83a9d8f
Merge pull request #1080 from xiaofei-2020/tree13
youngyangyang04 Feb 26, 2022
d9a9418
Merge branch 'master' into tree15
youngyangyang04 Feb 26, 2022
308380d
Merge pull request #1081 from xiaofei-2020/tree15
youngyangyang04 Feb 27, 2022
d2b05ae
Merge pull request #1083 from xiaofei-2020/tree16
youngyangyang04 Feb 27, 2022
5af7dce
Merge branch 'youngyangyang04:master' into master
Jerry-306 Feb 28, 2022
37e7d73
Update
youngyangyang04 Feb 28, 2022
e50e84b
Update
youngyangyang04 Feb 28, 2022
ce3e2da
Merge pull request #1084 from xiaofei-2020/tree17
youngyangyang04 Mar 1, 2022
e530160
Merge pull request #1085 from Guang-Hou/patch-1
youngyangyang04 Mar 1, 2022
c6f465a
Merge pull request #1086 from zhaoninge/master
youngyangyang04 Mar 1, 2022
1ed3e9e
Update
youngyangyang04 Mar 1, 2022
0f3c2ae
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
youngyangyang04 Mar 1, 2022
6226b26
Merge pull request #1088 from Jerry-306/master
youngyangyang04 Mar 2, 2022
792f1e7
Merge pull request #1089 from zcxzcxzcx/master
youngyangyang04 Mar 3, 2022
fdedb54
Merge pull request #1091 from Jerry-306/patch-47
youngyangyang04 Mar 3, 2022
ecde43b
update
youngyangyang04 Mar 5, 2022
a1d3835
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
youngyangyang04 Mar 5, 2022
7532e6e
Merge pull request #1090 from weiting-cn/master
youngyangyang04 Mar 6, 2022
49bac9f
Merge pull request #1092 from g10guang/patch-1
youngyangyang04 Mar 6, 2022
565b83e
Merge pull request #1093 from xiaofei-2020/tree18
youngyangyang04 Mar 6, 2022
f6360c7
Update
youngyangyang04 Mar 6, 2022
a27d1a4
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
youngyangyang04 Mar 6, 2022
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
Binary file added .DS_Store
Binary file not shown.
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@

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

<p align="center">
<a href="programmercarl.com" target="_blank">
Expand Down Expand Up @@ -88,8 +89,7 @@

## 前序

* [「代码随想录」后序安排](https://mp.weixin.qq.com/s/4eeGJREy6E-v6D7cR_5A4g)
* [「代码随想录」学习社区](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)
* [「代码随想录」学习社区](https://programmercarl.com/other/kstar.html)


* 编程语言
Expand Down Expand Up @@ -123,7 +123,7 @@

* 算法性能分析
* [关于时间复杂度,你不知道的都在这里!](./problems/前序/关于时间复杂度,你不知道的都在这里!.md)
* [$O(n)$的算法居然超时了,此时的n究竟是多大?](./problems/前序/On的算法居然超时了,此时的n究竟是多大?.md)
* [O(n)的算法居然超时了,此时的n究竟是多大?](./problems/前序/On的算法居然超时了,此时的n究竟是多大?.md)
* [通过一道面试题目,讲一讲递归算法的时间复杂度!](./problems/前序/通过一道面试题目,讲一讲递归算法的时间复杂度!.md)
* [本周小结!(算法性能分析系列一)](./problems/周总结/20201210复杂度分析周末总结.md)
* [关于空间复杂度,可能有几个疑问?](./problems/前序/关于空间复杂度,可能有几个疑问?.md)
Expand Down
85 changes: 85 additions & 0 deletions problems/0005.最长回文子串.md
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,92 @@ var longestPalindrome = function(s) {
};
```

## C
动态规划:
```c
//初始化dp数组,全部初始为false
bool **initDP(int strLen) {
bool **dp = (bool **)malloc(sizeof(bool *) * strLen);
int i, j;
for(i = 0; i < strLen; ++i) {
dp[i] = (bool *)malloc(sizeof(bool) * strLen);
for(j = 0; j < strLen; ++j)
dp[i][j] = false;
}
return dp;
}

char * longestPalindrome(char * s){
//求出字符串长度
int strLen = strlen(s);
//初始化dp数组,元素初始化为false
bool **dp = initDP(strLen);
int maxLength = 0, left = 0, right = 0;

//从下到上,从左到右遍历
int i, j;
for(i = strLen - 1; i >= 0; --i) {
for(j = i; j < strLen; ++j) {
//若当前i与j所指字符一样
if(s[i] == s[j]) {
//若i、j指向相邻字符或同一字符,则为回文字符串
if(j - i <= 1)
dp[i][j] = true;
//若i+1与j-1所指字符串为回文字符串,则i、j所指字符串为回文字符串
else if(dp[i + 1][j - 1])
dp[i][j] = true;
}
//若新的字符串的长度大于之前的最大长度,进行更新
if(dp[i][j] && j - i + 1 > maxLength) {
maxLength = j - i + 1;
left = i;
right = j;
}
}
}
//复制回文字符串,并返回
char *ret = (char*)malloc(sizeof(char) * (maxLength + 1));
memcpy(ret, s + left, maxLength);
ret[maxLength] = 0;
return ret;
}
```

双指针:
```c
int left, maxLength;
void extend(char *str, int i, int j, int size) {
while(i >= 0 && j < size && str[i] == str[j]) {
//若当前子字符串长度大于最长的字符串长度,进行更新
if(j - i + 1 > maxLength) {
maxLength = j - i + 1;
left = i;
}
//左指针左移,右指针右移。扩大搜索范围
++j, --i;
}
}

char * longestPalindrome(char * s){
left = right = maxLength = 0;
int size = strlen(s);

int i;
for(i = 0; i < size; ++i) {
//长度为单数的子字符串
extend(s, i, i, size);
//长度为双数的子字符串
extend(s, i, i + 1, size);
}

//复制子字符串
char *subStr = (char *)malloc(sizeof(char) * (maxLength + 1));
memcpy(subStr, s + left, maxLength);
subStr[maxLength] = 0;

return subStr;
}
```

-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
4 changes: 4 additions & 0 deletions problems/0015.三数之和.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,12 @@ public:
*/
if (nums[i] + nums[left] + nums[right] > 0) {
right--;
// 当前元素不合适了,可以去重
while (left < right && nums[right] == nums[right + 1]) right--;
} else if (nums[i] + nums[left] + nums[right] < 0) {
left++;
// 不合适,去重
while (left < right && nums[left] == nums[left - 1]) left++;
} else {
result.push_back(vector<int>{nums[i], nums[left], nums[right]});
// 去重逻辑应该放在找到一个三元组之后
Expand Down
4 changes: 4 additions & 0 deletions problems/0018.四数之和.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,13 @@ public:
// nums[k] + nums[i] + nums[left] + nums[right] > target 会溢出
if (nums[k] + nums[i] > target - (nums[left] + nums[right])) {
right--;
// 当前元素不合适了,可以去重
while (left < right && nums[right] == nums[right + 1]) right--;
// nums[k] + nums[i] + nums[left] + nums[right] < target 会溢出
} else if (nums[k] + nums[i] < target - (nums[left] + nums[right])) {
left++;
// 不合适,去重
while (left < right && nums[left] == nums[left - 1]) left++;
} else {
result.push_back(vector<int>{nums[k], nums[i], nums[left], nums[right]});
// 去重逻辑应该放在找到一个四元组之后
Expand Down
56 changes: 54 additions & 2 deletions problems/0020.有效的括号.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ class Solution {
```

Python:
```python3
```python
# 方法一,仅使用栈,更省空间
class Solution:
def isValid(self, s: str) -> bool:
Expand All @@ -180,7 +180,7 @@ class Solution:
return True if not stack else False
```

```python3
```python
# 方法二,使用字典
class Solution:
def isValid(self, s: str) -> bool:
Expand Down Expand Up @@ -283,8 +283,60 @@ var isValid = function(s) {
};
```

TypeScript:

版本一:普通版

```typescript
function isValid(s: string): boolean {
let helperStack: string[] = [];
for (let i = 0, length = s.length; i < length; i++) {
let x: string = s[i];
switch (x) {
case '(':
helperStack.push(')');
break;
case '[':
helperStack.push(']');
break;
case '{':
helperStack.push('}');
break;
default:
if (helperStack.pop() !== x) return false;
break;
}
}
return helperStack.length === 0;
};
```

版本二:优化版

```typescript
function isValid(s: string): boolean {
type BracketMap = {
[index: string]: string;
}
let helperStack: string[] = [];
let bracketMap: BracketMap = {
'(': ')',
'[': ']',
'{': '}'
}
for (let i of s) {
if (bracketMap.hasOwnProperty(i)) {
helperStack.push(bracketMap[i]);
} else if (i !== helperStack.pop()) {
return false;
}
}
return helperStack.length === 0;
};
```

Swift

```swift
func isValid(_ s: String) -> Bool {
var stack = [String.Element]()
Expand Down
33 changes: 32 additions & 1 deletion problems/0027.移除元素.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,37 @@ public:

旧文链接:[数组:就移除个元素很难么?](https://programmercarl.com/0027.移除元素.html)

```CPP
/**
* 相向双指针方法,基于元素顺序可以改变的题目描述改变了元素相对位置,确保了移动最少元素
* 时间复杂度:$O(n)$
* 空间复杂度:$O(1)$
*/
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int leftIndex = 0;
int rightIndex = nums.size() - 1;
while (leftIndex <= rightIndex) {
// 找左边等于val的元素
while (leftIndex <= rightIndex && nums[leftIndex] != val){
++leftIndex;
}
// 找右边不等于val的元素
while (leftIndex <= rightIndex && nums[rightIndex] == val) {
-- rightIndex;
}
// 将右边不等于val的元素覆盖左边等于val的元素
if (leftIndex < rightIndex) {
nums[leftIndex++] = nums[rightIndex--];
}
}
return leftIndex; // leftIndex一定指向了最终数组末尾的下一个元素
}
};
```


## 相关题目推荐

* 26.删除排序数组中的重复项
Expand Down Expand Up @@ -142,7 +173,7 @@ class Solution {

Python:

```python3
```python
class Solution:
"""双指针法
时间复杂度:O(n)
Expand Down
77 changes: 77 additions & 0 deletions problems/0028.实现strStr.md
Original file line number Diff line number Diff line change
Expand Up @@ -929,6 +929,83 @@ var strStr = function (haystack, needle) {
};
```

TypeScript版本:

> 前缀表统一减一

```typescript
function strStr(haystack: string, needle: string): number {
function getNext(str: string): number[] {
let next: number[] = [];
let j: number = -1;
next[0] = j;
for (let i = 1, length = str.length; i < length; i++) {
while (j >= 0 && str[i] !== str[j + 1]) {
j = next[j];
}
if (str[i] === str[j + 1]) {
j++;
}
next[i] = j;
}
return next;
}
if (needle.length === 0) return 0;
let next: number[] = getNext(needle);
let j: number = -1;
for (let i = 0, length = haystack.length; i < length; i++) {
while (j >= 0 && haystack[i] !== needle[j + 1]) {
j = next[j];
}
if (haystack[i] === needle[j + 1]) {
if (j === needle.length - 2) {
return i - j - 1;
}
j++;
}
}
return -1;
};
```

> 前缀表不减一

```typescript
// 不减一版本
function strStr(haystack: string, needle: string): number {
function getNext(str: string): number[] {
let next: number[] = [];
let j: number = 0;
next[0] = j;
for (let i = 1, length = str.length; i < length; i++) {
while (j > 0 && str[i] !== str[j]) {
j = next[j - 1];
}
if (str[i] === str[j]) {
j++;
}
next[i] = j;
}
return next;
}
if (needle.length === 0) return 0;
let next: number[] = getNext(needle);
let j: number = 0;
for (let i = 0, length = haystack.length; i < length; i++) {
while (j > 0 && haystack[i] !== needle[j]) {
j = next[j - 1];
}
if (haystack[i] === needle[j]) {
if (j === needle.length - 1) {
return i - j;
}
j++;
}
}
return -1;
}
```

Swift 版本

> 前缀表统一减一
Expand Down
2 changes: 1 addition & 1 deletion problems/0031.下一个排列.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public:
for (int j = nums.size() - 1; j > i; j--) {
if (nums[j] > nums[i]) {
swap(nums[j], nums[i]);
sort(nums.begin() + i + 1, nums.end());
reverse(nums.begin() + i + 1, nums.end());
return;
}
}
Expand Down
2 changes: 1 addition & 1 deletion problems/0035.搜索插入位置.md
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ func searchInsert(nums []int, target int) int {
```

### Python
```python3
```python
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1
Expand Down
Loading