mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
Update
This commit is contained in:
@ -30,6 +30,7 @@
|
||||
* 求职
|
||||
* [程序员应该如何写简历(附简历模板)](https://mp.weixin.qq.com/s/PkBpde0PV65dJjj9zZJYtg)
|
||||
* [BAT级别技术面试流程和注意事项都在这里了](https://mp.weixin.qq.com/s/815qCyFGVIxwut9I_7PNFw)
|
||||
* [深圳原来有这么多互联网公司,你都知道么?](https://mp.weixin.qq.com/s/Yzrkim-5bY0Df66Ao-hoqA)
|
||||
|
||||
* 算法性能分析
|
||||
* [究竟什么是时间复杂度,怎么求时间复杂度,看这一篇就够了](https://mp.weixin.qq.com/s/lYL9TSxLqCeFXIdjt4dcIw)
|
||||
@ -375,6 +376,7 @@
|
||||
|[0143.重排链表](https://github.com/youngyangyang04/leetcode/blob/master/problems/0143.重排链表.md) |链表 |中等|**快慢指针/双指针** 也可以用数组,双向队列模拟,考察链表综合操作的好题|
|
||||
|[0144.二叉树的前序遍历](https://github.com/youngyangyang04/leetcode/blob/master/problems/0144.二叉树的前序遍历.md) |树 |中等|**递归** **迭代/栈**|
|
||||
|[0145.二叉树的后序遍历](https://github.com/youngyangyang04/leetcode/blob/master/problems/0145.二叉树的后序遍历.md) |树 |困难|**递归** **迭代/栈**|
|
||||
|[0147.对链表进行插入排序](https://github.com/youngyangyang04/leetcode/blob/master/problems/0147.对链表进行插入排序.md) |链表 |中等|**模拟** 考察链表综合操作|
|
||||
|[0150.逆波兰表达式求值](https://github.com/youngyangyang04/leetcode/blob/master/problems/0150.逆波兰表达式求值.md) |栈 |中等|**栈**|
|
||||
|[0151.翻转字符串里的单词](https://github.com/youngyangyang04/leetcode/blob/master/problems/0151.翻转字符串里的单词.md) |字符串 |中等|**模拟/双指针**|
|
||||
|[0155.最小栈](https://github.com/youngyangyang04/leetcode/blob/master/problems/0155.最小栈.md) |栈 |简单|**栈**|
|
||||
|
BIN
pics/147.对链表进行插入排序.png
Normal file
BIN
pics/147.对链表进行插入排序.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 135 KiB |
47
problems/0147.对链表进行插入排序.md
Normal file
47
problems/0147.对链表进行插入排序.md
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
## 思路
|
||||
|
||||
这道题目还是很考察链表操作的。
|
||||
|
||||
如果不用虚拟头结点的话,这道题会很麻烦,对虚拟头结点不熟悉的同学,可以看这篇:[链表:听说用虚拟头节点会方便很多?](https://mp.weixin.qq.com/s/slM1CH5Ew9XzK93YOQYSjA)。
|
||||
|
||||
如果想整体掌握链表操作的话,看一下这篇[链表大总结](https://mp.weixin.qq.com/s/vK0JjSTHfpAbs8evz5hH8A)。
|
||||
|
||||
本题在模拟插入排序的过程中,一共要有三次改变节点指针的操作,如果不画一个图,很容易搞蒙了。
|
||||
|
||||
我举一个排序插入节点2的例子,并详细标注了每一个步骤,晚上一个插入操作有五步,如下:
|
||||
|
||||
<img src='../pics/147.对链表进行插入排序.png' width=600> </img></div>
|
||||
|
||||
代码中注释的步骤和图中都是一一对应的,对着图看代码,就比较清晰了,C++代码如下:
|
||||
|
||||
```
|
||||
class Solution {
|
||||
public:
|
||||
ListNode* insertionSortList(ListNode* head) {
|
||||
if (head == nullptr) return head;
|
||||
|
||||
ListNode* dummyHead = new ListNode(0); // 定一个虚拟头结点
|
||||
ListNode* cur = head;
|
||||
ListNode* pre = dummyHead;
|
||||
|
||||
while (cur != nullptr) {
|
||||
while (pre->next != nullptr && pre->next->val < cur->val) {
|
||||
pre = pre->next;
|
||||
}
|
||||
// 在pre和prenext之间插入数据
|
||||
ListNode* next = cur->next; // 步骤一:保存curnext
|
||||
cur->next = pre->next; // 步骤二
|
||||
pre->next = cur; // 步骤三
|
||||
pre = dummyHead; // 步骤四:pre重新指向虚拟头结点来找下一个插入位置
|
||||
cur = next; // 步骤五:cur的前一个节点的下一个节点指向保存的next
|
||||
}
|
||||
return dummyHead->next;
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
> **我是[程序员Carl](https://github.com/youngyangyang04),[组队刷题](https://img-blog.csdnimg.cn/20201115103410182.png)可以找我,本文[leetcode刷题攻略](https://github.com/youngyangyang04/leetcode-master)已收录,更多[精彩算法文章](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUxNjY5NTYxNA==&action=getalbum&album_id=1485825793120387074&scene=173#wechat_redirect)尽在:[代码随想录](https://img-blog.csdnimg.cn/20200815195519696.png),关注后就会发现和「代码随想录」相见恨晚!**
|
||||
|
||||
**如果感觉题解对你有帮助,不要吝啬给一个👍吧!**
|
||||
|
@ -2,6 +2,10 @@
|
||||
|
||||
# 回溯法理论基础
|
||||
|
||||
转眼间[「代码随想录」](https://img-blog.csdnimg.cn/20200815195519696.png)里已经分享连续讲解了21天的回溯算法,是时候做一个大总结了,本篇高能,需要花费很大的精力来看!
|
||||
|
||||
关于回溯算法理论基础,我录了一期B站视频[带你学透回溯算法(理论篇)](https://www.bilibili.com/video/BV1cy4y167mM)如果对回溯算法还不了解的话,可以看一下。
|
||||
|
||||
在[关于回溯算法,你该了解这些!](https://mp.weixin.qq.com/s/gjSgJbNbd1eAA5WkA-HeWw)中我们详细的介绍了回溯算法的理论知识,不同于教科书般的讲解,这里介绍的回溯法的效率,解决的问题以及模板都是在刷题的过程中非常实用!
|
||||
|
||||
**回溯是递归的副产品,只要有递归就会有回溯**,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。
|
||||
@ -306,7 +310,7 @@ used数组可是全局变量,每层与每层之间公用一个used数组,所
|
||||
|
||||
以输入:[["JFK", "KUL"], ["JFK", "NRT"], ["NRT", "JFK"]为例,抽象为树形结构如下:
|
||||
|
||||
<img src='https://img-blog.csdnimg.cn/2020111518065555.png' width=600> </img></div>
|
||||

|
||||
|
||||
本题可以算是一道hard的题目了,关于本题的难点我在文中已经详细列出。
|
||||
|
||||
@ -395,7 +399,7 @@ N皇后问题分析:
|
||||
|
||||
# 总结
|
||||
|
||||
**历时21天,14道经典题目分析,20张树形图,21篇回溯法精讲文章,从组合到切割,从子集到排列,从棋盘问题到最后的复杂度分析**,至此收尾了。
|
||||
**[「代码随想录」](https://img-blog.csdnimg.cn/20200815195519696.png)历时21天,14道经典题目分析,20张树形图,21篇回溯法精讲文章,从组合到切割,从子集到排列,从棋盘问题到最后的复杂度分析**,至此收尾了。
|
||||
|
||||
这里的每一种问题,讲解的时候我都会和其他问题作对比,做分析,确保每一个问题都讲的通透。
|
||||
|
||||
|
@ -12,6 +12,18 @@
|
||||
|
||||
# 文章篇
|
||||
|
||||
* 求职
|
||||
* [程序员应该如何写简历(附简历模板)](https://mp.weixin.qq.com/s/PkBpde0PV65dJjj9zZJYtg)
|
||||
* [BAT级别技术面试流程和注意事项都在这里了](https://mp.weixin.qq.com/s/815qCyFGVIxwut9I_7PNFw)
|
||||
* [深圳原来有这么多互联网公司,你都知道么?](https://mp.weixin.qq.com/s/Yzrkim-5bY0Df66Ao-hoqA)
|
||||
|
||||
* 算法性能分析
|
||||
* [究竟什么是时间复杂度,怎么求时间复杂度,看这一篇就够了](https://mp.weixin.qq.com/s/lYL9TSxLqCeFXIdjt4dcIw)
|
||||
* [一文带你彻底理解程序为什么会超时](https://mp.weixin.qq.com/s/T-vcJSkq2-0s0bBB-itWbQ)
|
||||
* [一场面试,带你彻底掌握递归算法的时间复杂度](https://mp.weixin.qq.com/s/Kt-Mvs8LeVqidLGUqySj1g)
|
||||
* [算法分析中的空间复杂度,你真的会了么?](https://mp.weixin.qq.com/s/sXjjnOUEQ4Gf5F9QCRzy7g)
|
||||
* [刷leetcode的时候,究竟什么时候可以使用库函数,什么时候不要使用库函数,过来人来说一说](https://leetcode-cn.com/circle/article/E1Kjzn/)
|
||||
|
||||
* 数组
|
||||
* [必须掌握的数组理论知识](https://mp.weixin.qq.com/s/X7R55wSENyY62le0Fiawsg)
|
||||
* [数组:每次遇到二分法,都是一看就会,一写就废](https://mp.weixin.qq.com/s/fCf5QbPDtE6SSlZ1yh_q8Q)
|
||||
|
Reference in New Issue
Block a user