时间复杂度
- T(n)=O(f(n))通过模拟的场景来反映算法实际运算时的速度,不同T(n)在不同的状态下表现的速度也不一样,比如算法A为O(100n)与算法B为O(5n*2),当n小时算法B快,当n大时算法A快。这就是时间复杂度带来的差异
- 常见的时间复杂度O(1)<O(logn)<O(n)<O(nlonn)<O(n*2)
空间复杂度
- 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,用S(n)=O(f(n))
- 常见的空间复杂度O(1)<O(n)<o(n*2)
什么是数组
- 数组是由有限个相同类型的变量所组成的有序集合,数组的物理储存方式是顺序存储,访问方式是随机访问。利用下标查找元素的时间复杂度是O(1),中间插入和删除数组元素的时间复杂度是O(n)。
什么是链表
链表是一钟链式的数据结构,由若干个节点组成,每个节点包含指向下一个节点的指针。链表的物理储存方式是随机存储,访问方式是顺序访问。查找链表的节点时间复杂度是O(n),中间插入和删除节点的时间复杂度是O(1)。
什么是栈
栈是一种线性逻辑结构,可以用数组实现,也可以用链表实现。栈包含入栈和出栈操作,遵循先入后出的原则(FILO)。
什么是队列
队列也是一种线性逻辑结构,可以用数组实现,也可以用链表实现。包含入队和出队操作,遵循先入先出的原则(FIFO)。
什么是散列表
- 散列表也叫哈希表,是存储Key-Value映射的集合。对于某一个Key,散列表可以在接近O(1)的时间内进行读写操作。散列表通过哈希函数实现Key和数组下标的转换。
- 解决哈希冲突的2种方法
- 开放寻址法:当准备插入的下标下已有值,则通过向右移动来寻找空的值这只是其中一种方法,在Java中有ThreadLocal用的就开放寻址法解决哈希冲突
- 链表法:这种方法在HashMap中,当插入的下标中已有值,则通过next指针指向同下标一个新的值,通过这个链表,当查找时,先找到下标再通过一层一层的指针来查找所需所需元素