This commit is contained in:
youngyangyang04
2020-11-21 13:35:12 +08:00
parent ece30cc597
commit 04145a2e6c
5 changed files with 67 additions and 2 deletions

View File

@ -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) |栈 |简单|**栈**|

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

View 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),关注后就会发现和「代码随想录」相见恨晚!**
**如果感觉题解对你有帮助,不要吝啬给一个👍吧!**

View File

@ -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>
![](https://img-blog.csdnimg.cn/2020111518065555.png)
本题可以算是一道hard的题目了关于本题的难点我在文中已经详细列出。
@ -395,7 +399,7 @@ N皇后问题分析
# 总结
**历时21天14道经典题目分析20张树形图21篇回溯法精讲文章从组合到切割从子集到排列从棋盘问题到最后的复杂度分析**,至此收尾了。
**[「代码随想录」](https://img-blog.csdnimg.cn/20200815195519696.png)历时21天14道经典题目分析20张树形图21篇回溯法精讲文章从组合到切割从子集到排列从棋盘问题到最后的复杂度分析**,至此收尾了。
这里的每一种问题,讲解的时候我都会和其他问题作对比,做分析,确保每一个问题都讲的通透。

View File

@ -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)