网站免费正能量软件直播,现代教育网站开发项目的研究,上海室内设计公司哪家好,如何查外贸网站外链前言#xff1a;最近积累了一些算法题量#xff0c;正在刷东神的算法笔记#xff0c;监督自己记录下读后启发#xff0c;顺便帮助道友们阅读
数据结构
这一部分老生常谈#xff0c;数据的存储方式只有顺序存储和链式存储。
最基本的数组和链表对应这两者#xff0c;栈…前言最近积累了一些算法题量正在刷东神的算法笔记监督自己记录下读后启发顺便帮助道友们阅读
数据结构
这一部分老生常谈数据的存储方式只有顺序存储和链式存储。
最基本的数组和链表对应这两者栈和队列都可以用顺序存储和链式存储实现图的两种表示方法邻接表就是链表邻接矩阵就是二维数组散列表就是通过散列函数把键映射到一个大数组里树用数组实现就是堆因为堆是一个完全二叉树用数组存储不需要节点指针操作也比较简单用链表实现就是常见的树。
在性能上数组由于是紧凑连续存储,可以随机访问通过索引快速找到对应元素而且相对节约存储空间。链表因为元素不连续而是靠指针指向下一个元素的位置所以不存在数组的扩容问题如果知道某一元素的前驱和后驱操作指针即可删除该元素或者插入新元素时间复杂度 O(1)。但是正因为存储空间不连续你无法根据一个索引算出对应元素的地址所以不能随机访问而且由于每个元素必须存储指向前后元素位置的指针会消耗相对更多的储存空间。
数据操作
众所周知的增删查改抽象后就是遍历和访问。而遍历和访问分为线性的和非线性线性是 for/while 迭代为代表非线性是递归为代表。
算法心得
看了下作者的观点发现自己真的对算法有误解刷算法题重点是计算机思维需要你能够站在计算机的视角抽象、化简实际问题然后用合理的数据结构去解决问题而不是数学建模和调参经验。针对计算机的特点算法题就是在穷举优化。
算法的技巧上都是被题目狠狠教做人
数组的有二分双指针滑动窗口前缀和差分
链表日常双指针或者多指针偶尔用哨兵节点
二叉树分为遍历一遍和利用递归分解分别对应回溯和动态规划有的时候需要剪枝和备忘录