![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
Lqq'srogue
不求甚解 观其大略
展开
-
基础排序算法的实现,时间复杂度,空间复杂度,是否稳定
1原创 2020-12-06 21:30:31 · 108 阅读 · 0 评论 -
JDK1.7和1.8,HashMap的put源码流程图分享
主要介绍了,put源码的流程,方便读者自己阅读源码的时候,更方便 介绍了1.7hashMap的死循环问题,关于底层的算法(扰动函数)以及泊松分布,本人也不是很明白,感兴趣的小伙伴可以google。 本人水平有限,以上流程图仅供参考,个人理解,如有不对,欢迎留言指正,如有收获,小赞一波,谢谢。 ...原创 2020-07-16 22:05:28 · 292 阅读 · 0 评论 -
手撕LRU算法O(1)的时间复杂度(最近最少使用淘汰算法,常用于缓存)
LRU算法O(1)的复杂度实现: 如果不是不要求时间复杂度,可以采用链表加时间戳的形式实现 O(1)的时间复杂度,单单采用双向链表的数据结构是不够的,虽然删除和添加的时间复杂度为O(1)的,但是我们想要定位到要删除的元素,还是需要从头开始依次遍历才可以,如何O(1)定位到想要的节点,可以采用散列表,所以最终我们采用散列表+双向链表的形式实现。 当然如果不要求手撕的话,可以直接使用LinkedHashMap。 我这里直接手撕了: public class LRUCache { private int原创 2020-05-23 23:11:54 · 509 阅读 · 0 评论 -
如何优雅计算菲波那切数列,时间复杂度为O(log(n))
首先看leetcode上一道简单的题目: leetcode上的爬楼梯的问题 题目大致描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 f(n) = f(n-1)+f(n-2); // f(n)为n节台阶的走法。n节台阶的走法,为n-1和n-2台阶走法之和。 这道题解法很多,我这里主要分分享三种,其实第三种,我也是查一些资料才知道能这么解答,今天写这个主要是整理自己的思路,方便以后复习,温故而知新,原创 2020-05-18 16:00:00 · 554 阅读 · 1 评论