还是补基础,学拉钩教育的《300分钟搞定数据结构与算法》https://kaiwu.lagou.com/course/courseInfo.htm?courseId=3 课程的笔记。
01.常用数据结构
数组、字符串
①示例:翻转字符串
用两个指针分别指向字符串首尾,交换两个字符,指针分别向前后进一位。直到两个指针相遇。
1 | # 翻转字符串 |
数组的优点:简单,索引查询效率O(1)。
数组的缺点:值查询,增删的效率O(n)。
②两个字符串s和t,判断t是否是s的异位词。
即字母数量相同,排列不同。
1 | # 2.两个字符串s和t,判断t是否是s的异位词。 |
力扣第242题,提交通过。
链表
优点,灵活使用内存空间,插入删除时间复杂度O(1)
缺点,只能顺序查找,复杂度O(n)。
③链表翻转问题
给定一个链表,每k个节点进行翻转。
1 | def reverseKGroup(head, k): |
力扣第25题,提交通过。第24题就是k = 2的情况,也提交通过了。
栈:后进先出,只能从栈顶进出。时间复杂度O(1)。
④给定一个只包含()[]{}的字符串,判断其是否有效。
1 | # 5.判断括号符号的有效性 |
力扣第20题,已提交通过。
⑤气温列表
给定一个每日气温列表,返回一个列表,数值为今天以后多长时间气温会回升。
1 | # 算法一,穷举,超时了 |
能想到的最简单的方法是直接穷举,复杂度是O(n²)。力扣739题,提交显示超出时间限制。
再照教程用栈试试。
1 | # 算法2,用堆栈,降低时间复杂度 |
自己写的总是有问题,网上找了个现成的,通过了。
其它栈的题。
力扣224:输入含数字,括号和+-的字符串,计算结果。
1 | # 7.基本计算器 |
力扣227,增加乘除法的计算器。
1 | # 高级计算器 |
力扣84题,柱状图最大矩形面积
1 | # 9.柱状图最大矩形 |
再用双端队列
1 | # 用双端队列求解 |
提交,运行时间比第一个快了很多。
树的特点是有递归形式。
树的遍历有前序,中序和后序三种,以访问根结点的顺序区分。
参考
https://zhuanlan.zhihu.com/p/55577744
照着撸一遍吧。
1 | # coding:utf-8 |
结果
前序遍历: [‘root’, 0, 2, 6, 7, 3, 8, 9, 1, 4, 5]
中序遍历: [6, 2, 7, 0, 8, 3, 9, ‘root’, 4, 1, 5]
后序遍历: [6, 7, 2, 8, 9, 3, 0, 4, 5, 1, ‘root’]
层次遍历: [‘root’, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
树的应用
力扣230题,给定二叉搜索树,找到第k个最小的元素。
对二叉搜索树进行中序遍历,即为对数据进行排序,其第k个值即为所求。
1 | # 力扣230题,第k大的元素 |
提交通过。
本篇的代码: https://github.com/zwdnet/MyQuant/tree/master/42
以前学过的,但是一动手才发现很多时候都写不出来,要参考别人写的。实际干活还是用最简单的线性结构,算法第一个念头就是穷举。不知道我是该去刷题呢还是做中学,碰到了再说?先把这个系列学完吧。
我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
我的个人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的微信个人订阅号:赵瑜敏的口腔医学学习园地