(留坑)小灰的算法之旅 读书笔记(三) 数据结构

数组
1.读取元素  使用下标直接读取 (通过下标读取元素的方式叫做随机读取)
2.更新元素  使用下标直接赋值
二者的时间复杂度都是O(1)
3.插入元素
  尾部插入  等同于更新元素
  中间插入  从后向前遍历,将后面的元素依次向后移动,再向目标位置插入更新
  超范围插入  由于数组定长,需要重新创建一个数组,将原数组平移过来,再进行插入操作
  对于插入操作而言,数组扩容的时间复杂度是O(n),插入并移动元素的时间复杂度也是O(n),所以综合起来的时间复杂度是O(n)
4.删除元素
  从删除位的后面一位开始,向数组末端循环,依次将元素前移
  删除操作只涉及元素的移动,时间复杂度也是O(n)
  对删除操作而言,当数组元素没有顺序要求时,可以取巧,将删除目标位置的元素与最后一位调换,再移除最后一位元素,此时时间复杂度是O(1)。本方法只做参考,并不是删除元素时主流的操作方式。

数组具有非常高效的随机访问能力,只要给出下标,就可以用常量时间找到对应元素。
有一种高效查找元素的算法叫作二分查找,就是利用了数组的这个优势。
数组的劣势体现在插入和删除方面,由于数组元素连续紧密地存储在内存中,插入、删除元素都会导致大量元素被迫移动,影响效率。

总的来说,数组适合“读操作多,写操作少”的场景
 

==留坑
链表
物理结构-逻辑结构
栈和队列
散列表-哈希表-字典
---

二叉树
满二叉树
完全二叉树   指的是结点位置,而非存在结点位置上的值
二叉查找树(二叉排序树)
深度优先遍历(前中后序) (递归实现、栈实现)
广度优先遍历  (层序)      (队列实现)
二叉堆(本质上是完全二叉树,又细分为最大堆和最小堆)(优先队列)
==
排序算法
时间复杂度为O(n^2)的:冒泡,选择,插入
介于O(n^2)和O(nlogn)之间的: 希尔排序
O(nlogn)的:快速排序,归并排序,堆排序
时间复杂度为线性的排序:计数排序,桶排序,基数排序
本书仅讲述:冒泡排序,快速排序,堆排序,计数排序,桶排序
冒泡排序
快速排序(分治法)
==
面试算法
判断链表有环
最小栈的实现
最大公约数
如何判断一个数是否为2的整数次幂
无序数组排序后的最大相邻差
用栈来实现队列(均摊时间复杂度)
寻找全排列的下一个数
删去k个数字后的最小值(贪心算法,栈优化)
如何实现大整数相加(计数排序,栈优化)
金矿问题(动态规划)
寻找缺失整数(求和做差、异或运算)
Bitmap
LRU 最近最少使用
A星寻路算法
红包分发

 

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值