
数据结构与算法
文章平均质量分 69
一场雪ycx
you only live once.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法】K个一组翻转链表
【算法】K个一组翻转链表出处leetcode 25:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/题解地址可参考:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/k-ge-yi-zu-fan-zhuan-lian-biao-by-leetcode-solutio/题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正原创 2022-01-22 15:24:25 · 698 阅读 · 0 评论 -
【算法】二叉树的右视图
Android自定义View,一个可以显示进度的圆环View效果如图所示:代码如下public class PlayProgressView extends View { private Paint mPaint; private int roundColor; private int roundProgressColor; private int triangleColor; private float roundWidth; private int原创 2020-10-07 18:03:29 · 1598 阅读 · 1 评论 -
【算法】包含min函数的栈
Http1.x和Htpp/2的区别1、Http/2采用二进制格式而非文本格式比起像Http/1.x这样的文本协议,二进制协议解析起来更高效,更重要的是错误更少。2、多路复用Http/1.x有个问题叫线端阻塞,它是指一个连接一次只提交一个请求的效率比较高,多了就会变慢。而多路传输可以很好的解决这个问题,因为它能同时处理多个消息的请求和响应,甚至可以在传输过程中将一个消息跟另一个参杂在一起。所以客户端只需要一个连接就能加载一个页面。3、Http/2使用报头压缩,降低了开销假定一个页面有80个资源要加原创 2020-10-07 18:01:53 · 297 阅读 · 0 评论 -
【算法】判断链表是否有环/环入口点/…
标题 检测APP冷启动时间的方法前言冷启动时间定义,对于Activity来说,启动时首先执行的是onCreate(),onSatrt(),onResume()这些生命周期函数。但即使这些生命周期方法回调结束,应用也不算已经完全启动,还需要等待View树全部构建完毕。一般认为,setContentView中的View全部显示结束了,才算是应用完全启动了。也可以说是从Application开始到首页显示出来这个过程,如下:Application的构造器方法—>attachBaseContext()—原创 2020-08-20 17:19:35 · 1455 阅读 · 0 评论 -
【算法】判断链表是否有环/环入口点/......
【算法】判断链表是否有环/环入口点/…题目这是一个比较经典的问题,给定一个单链表,判断其中是否有环其他相关算法:如果存在环,找出环的入口点如果存在环,求出环上节点的个数一、判断其中是否有环思路快慢指针:开始的时候两个指针都指向链表头,然后让快指针fast向后移动两个节点,同时慢指针slow向后移动一个节点,直到快指针指向null为止。由于fast要比slow移动的快,如果有环,fast一定会先进入环,而slow后进入环。当两个指针都进入环之后,经过一定步的操作之后,二者一定能够在环上相原创 2021-12-31 11:46:04 · 217 阅读 · 0 评论 -
【算法】删除链表的倒数第N个结点
【算法】删除链表的倒数第N个结点出处剑指offer 021题解地址可参考:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/题目给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2原创 2021-12-31 11:04:57 · 167 阅读 · 0 评论 -
【图文并茂】讲解HashMap引发的死循环
官方介绍文档上已经明确说过了,HashMap是线程不安全的,那么为啥会线程不安全?首先是JDK1.7的HashMap上,在多线程环境下操作HashMap可能引起死循环。原因是在HashMap扩容时,链表转移后,前后链表顺序倒置(头插法导致),在转移过程中修改了原来链表中节点的引用关系,导致链表结点互相引用,即形成了环,这种情况下,当我们使用get操作获取到环形链表处的数据,就会发生死循环。在JDK1.8中,同样的前提下并不会引起这个死循环,原因是扩容转移后前后链表顺序不变,保持了之前节点的引用关系。但是即使原创 2020-10-10 10:23:09 · 8786 阅读 · 6 评论 -
【HashMap】源码分析
【HashMap】源码分析我们先大致的了解一下HashMap。从使用的角度上看,它使用起来非常简单,put操作时,保存的是键值对,get操作时,通过键就即可拿到值,它的键值对都是支持null的,这在一定程度上提升了容错率,另外,HashMap实际上是非线程安全的。从内在角度看,它使用了hash算法+数组+链表的结构存储数据,而在JDK 1.8及之后的版本增加红黑树的数据结构来存储数据。构造方法HashMap的构造方法有四个,分别如下:1、public HashMap(int initialCapa原创 2021-12-23 11:09:17 · 308 阅读 · 0 评论 -
【数据结构与算法】LRU 缓存淘汰算法
LRU 缓存淘汰算法介绍最近,我个人在业务上接触到LRU缓存的场景非常多,比如本人是负责维护公司的音视频播放器中间件的,音视频的业务场景就涉及到LRU缓存,播放器需要对视频流进行缓存,一方面便于下次加载视频更快,另一方面可以一定程度上的节省用户流量,缓存到达一定容量,就要把最久没用过的缓存删除掉。再比如,迭代开发过程中用到的Glide框架,里面的图片缓存等,也是用到了LRU缓存机制。LRU,Least Recently Used,就是一种缓存淘汰策略。我们都知道,计算机的存储容量是有限的,所以缓存也原创 2021-12-08 10:58:57 · 369 阅读 · 0 评论 -
【算法】求N叉树的最大深度(java)
N叉树的最大深度N叉树的定义是什么,就是每个节点下会有N个节点。用代码定义一个N叉树的一个节点类如下:class NTreeNode { //节点的值 int val; //子节点 List<NTreeNode> sonTreeNodeList; NTreeNode() {} NTreeNode(int val, List<NTreeNode> list) { this.val = val; son原创 2021-10-25 16:28:55 · 710 阅读 · 0 评论 -
【算法】二叉树的最大深度
二叉树的最大深度二叉树的定义定义是什么,就是每个节点下会有二个节点(左节点和右节点)。用代码定义一个二叉树的一个节点类如下:class TreeNode { //节点值 int val; //左节点 TreeNode left; //右节点 TreeNode right; //构造函数 TreeNode() { } TreeNode(int val) { this.val = val; } Tree原创 2021-10-25 16:49:49 · 267 阅读 · 0 评论 -
【数据结构】之双向链表的复杂度分析
双向链表的复杂度分析我们先看一下它的概念(来自百度百科):它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。和单向链表不同的是,双链表除了有一个指向下一节点的指针外,还有一个指向前一节点的指针,这也就意味着,双向链表能够快速找到前驱节点,也能快速找到后驱节点。和单向链表相比,对于插入或删除指定节点的操作,因为单向链表需要从头遍历定位到这个节点的前驱节点,所以它的平均复杂度是O(n原创 2021-11-26 11:51:30 · 10377 阅读 · 2 评论