第一周学习
1. 总结
开始了第一周的算法训练营学习,这一周感觉事情比较多,课程拖到了周末,有的不太好,下一周要每天刷算法,刷了两天题,感觉算法就是很巧妙,原来可以这样子做,有些点确实需要好好思考才可以想到,每道题换种思路就会变的更快,我是使用python写的,有的题目甚至可以一行就解决
2. 知识
2.1 数组
- 最基础、最简单的数据结构
- 数组用一块连续的内存空间,来存储相同类型的一组数据
- 最大的特点就是支持随机访问,
- 插入、删除操作比较低效,平均情况时间复杂度为 O(n)。
在平时的业务开发中,我们可以直接使用编程语言提供的容器类,但是,如果是特别底层的开发,直接使用数组可能会更合适。
2.2 链表
不连续的存储空间
- 不支持随机访问
- 增加和删除O(1)
- 查找需要遍历整个链表,O(n)
2.3 跳表
2.5 队列
- 受限线性表:先进先出
- 只能在一端新增删除数据
- 入队 enqueue():O(1)
-
3. 刷题
-
3.1 26.删除排序数组中的重复项
正向遍历会出错,可以逆向思维,逆向遍历
可以使用双指针解决
nums[:]
- nums1 = A # 更改 nums1 这一变量名所指向的对象。让 nums1 变量指向 A 所指向的对象
- nums1[:] = A # 对 nums1 指向的对象赋值。把 A 变量指向的对象的值逐个 copy 到 nums1 指向的对象中并覆盖 nums1 指向的对象的原来值。
- nums[:]讲解
- python的优势:a,b = b,a
-
3.3 1.两数之和
-
3.4 21.合并两个有序链表
哑节点
- 链表很多题都可以使用哑节点解决
递归
刚开始觉得很简单,没有考虑到9.。。的情况
- 对999中的每一位进行处理
-
3.6 88.合并两个有序数组
双指针
- 对新数组直接排序一下
- 突然想到一个问题,0都是在后面吗,如果出现1,2,3,0,0,1怎么办
- 有序数组
- 突然想到一个问题,0都是在后面吗,如果出现1,2,3,0,0,1怎么办
- 看题解提到了 归并排序