第一章 算法入门与数组篇
学习《Datawhale Leetcode 算法笔记》记录
一、算法基础
-
数据结构:计算机中的数据是以何种方式进行组织、存储的。
-
逻辑结构:集合结构、线性结构、树形结构、图形结构
-
物理结构:顺序结构、链式结构
-
算法:解决问题的方法,一系列运算步骤
-
算法的基本特性:输入、输出、有穷性、确定性、可行性
-
复杂度:时间复杂度(以基本操作次数作为单位)、空间复杂度(以算法的辅助空间大小作为单位)
-
渐进符号:渐进紧确界符号 Θ \Theta Θ,渐进上界符号 O O O,渐进下界符号 Ω \Omega Ω
-
空间复杂度主要包括:① 局部变量所占用的存储空间;② 系统为实现递归所使用的堆栈空间
-
leetcode 刷题技巧:① 五分钟思考法:如果一道题如果5分钟之内有思路,就立即动手写代码解题。如果5分钟之后还没有思路,就直接去看题解。然后根据题解的思路,自己去实现代码。如果发现自己看了题解也无法实现代码,就认真阅读题解的代码,并理解代码的逻辑。② 重复刷题:遇见不会的题,多刷几遍,不断加深理解。③ 写解题报告:如果能够用简介清晰的语言让别人听懂这道题目的思路,那就说明你真正理解了这道题的解法。
二、数组基础
-
数组——使用了顺序存储的线性表
-
如何实现随机访问数组元素:通过寻址公式、基于首地址计算对应元素地址。
寻址公式:下标 i i i对应的数据元素地址 = 数据首地址 + i i i × 单个数据元素所占内存大小。
-
原生 Python 中没有数组的概念,使用了类似 Java 中 ArrayList 容器类数据结构,叫做列表。列表中存储的数据类型、数据长度都可以不一致。
-
基本数组操作:访问(1),查找(n),插入(append 1,insert n),改(1),删(pop 无参数 1,pop 有参数 n,remove n)
-
解题回顾:数组基础的题目核心在于找到迭代规律,模拟迭代并处理好边界情况。几道简单题以及中等难度的旋转图像题能独立解出都是很好地抓住了其下标迭代的规律,可以通过在纸上推演,结合矩阵的一般迭代方式来模拟找到迭代规律。另一个难点在于较复杂规律的模拟,需要重视边界情况,全面细致,更多的是需要耐心的体力活,例如螺旋矩阵一题,找到规律并不困难,但要耐心的模拟其实是一个问题,尤其是如果笔面试碰到这类题目,在时间有限的情况下能否清晰地解出,是一个挑战。总体来说,数组基础的题目更像是数学题+体力活。
-
阶段总结:整体难度不大,技巧性不强,但未解出的两道模拟题需要日后回顾练习。