数据结构与算法
文章平均质量分 88
❀神花❀
忙着上班,暂时没时间更新博客
展开
-
浅析字符匹配算法
文章目录原创 2021-10-03 15:00:49 · 160 阅读 · 0 评论 -
设计一个简单的线程池
文章目录设计简述简单实现基础设计简述一个设计方案一定是从最小的架子慢慢搭建起来的,那么想一下,最基础的线程池应该是什么样子的?【1】需要有线程源。比较线程池说白了就是一个存放线程的容器,自身不生产线程。(当然了,如果暂时不接入线程工厂的话,循环new也是一种最基本的方案)【2】需要有一个工作队列。我们的程序是一个进程,每个请求到达web容器,都会被创建一个线程(不一定,取决于web容器怎么配置的),那么同一时间可能有多个线程想要向工作队列提交任务,为了避免任务丢失,我们应该保证对队列的操作是同步的原创 2021-09-06 15:24:05 · 387 阅读 · 0 评论 -
一段话总结一道题:力扣50~100选
文章目录原创 2021-08-20 21:28:16 · 239 阅读 · 0 评论 -
一段话总结一道题:力扣0~50选
文章目录原创 2021-08-14 14:53:18 · 693 阅读 · 0 评论 -
一段话总结一道题:剑指offer75道题
文章目录03:数组中重复的数字04:二维数组中的查找05:替换空格06:从头到尾打印链表07:重建二叉树(中序+前序)09:双栈实现队列10:斐波那契、青蛙跳台阶11:旋转数组的最小数字剑指的地址03:数组中重复的数字前提:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内遍历数组中每一个数字num,并且将这个数字作为索引,将取到的数字nums[num]进行标记进行标记,当一个待标记的nums[num]已经是一个负数,说明这个num就是重复的数字 public int原创 2021-08-07 21:09:55 · 1218 阅读 · 0 评论 -
设计:栈和队列相互实现、最小栈、增量更新栈
文章目录原创 2021-07-26 20:56:02 · 135 阅读 · 0 评论 -
设计:循环双端队列
文章目录JDK的deque接口实现循环双端队列基于双向链表实现基于循环数组实现JDK的deque接口JDK1.6提供了双向队列的接口,它规定了一种双向队列的行为例如:头部插入/删除、尾部插入/删除。如果我们仅仅看deque接口的话(不看collection继承下来的方法),你会发现提供的方法都是基于头尾的。这个特点可以直接用于实现栈与队列。Deque接口继承自queue接口,特提供了更多指明方向的方法例如offerFirst、offerLast,如果仅使用Queue接口去接收一个实现类(如Linke原创 2021-07-26 17:59:45 · 324 阅读 · 0 评论 -
设计题:设计推特
文章目录原创 2021-07-26 13:51:27 · 524 阅读 · 1 评论 -
设计:哈希映射
文章目录原创 2021-07-25 23:35:26 · 141 阅读 · 1 评论 -
力扣复习启程!!从two sum开始
两数之和无序数组有序数组三数之和四数之和原创 2021-06-03 20:13:27 · 74 阅读 · 0 评论 -
多线程程序设计题型分析
多线程设计题交替打印生产者和消费者死锁写一个死锁死锁排除和避免哲学家进餐问题原创 2021-07-09 22:45:46 · 101 阅读 · 0 评论 -
设计:死锁、哲学家进餐问题
文章目录理解死锁写一个死锁检测死锁哲学家进餐问题理解死锁写一个死锁检测死锁哲学家进餐问题原创 2021-07-03 16:40:29 · 313 阅读 · 0 评论 -
设计:读写锁
分析reentrantReadWriteLock锁分离锁降级设计读写锁初级高级原创 2021-06-29 22:23:15 · 251 阅读 · 0 评论 -
设计:优先队列、TOPK问题
文章目录TopK引入堆排序PriorityQueue源码简析写一个优先队列TopK引入又这么几种问题:求出当前数组最小值、求出当前数据流中第K大的数。前者是一个固定的范围,而后者是一个变化的范围(当然了,你也可以看作若干个固定范围的快照)。解决以上问题的一个思路是排序,则难以避免需要扫描整个数组的值,而基于堆排序的时间复杂度是O(n*logK)调整的时间复杂度取决于堆的高度,将K个元素组成一个堆(数组形式的完全二叉树),因此可以调整的时间复杂度就是logK,如果你对整个数组建堆那么调整的时间复杂度原创 2021-06-28 20:58:37 · 238 阅读 · 0 评论 -
设计题:抢红包
复习时遇到的一道设计题,感觉挺有意思的。总额为num的红包,分给若干个人,要求每个人不能抢到空的红包,每个红包的金额不能过于接近,应该有大有小。一个不错的思路:将人数people看作是people个线段,那么我们只需要在线段上随机选出people-1个不重复的点,最后将这people-1个点以及首尾两个哨兵端点看作一条线,计算每个相邻点之间的距离就对应红包的大小——总额为num看作长度为num的线段,分红包问题转换为划分线段的问题。当发红包的发出红包之后,这个红包就经过一次“分割算法”将若干个包存入数原创 2021-06-16 17:24:34 · 318 阅读 · 0 评论 -
必备代码(三):二叉树的三种遍历(非递归写法)+层序遍历(递归写法)
带填坑原创 2021-05-16 18:15:30 · 279 阅读 · 1 评论 -
必备代码(二):八大排序(链表/数组)
待填坑原创 2021-04-22 20:26:55 · 805 阅读 · 0 评论 -
必备代码(一):四种LRU缓存实现+LFU缓存实现
目录前言HashMap + LinkedListLinkedHashMap扩展hashMap + 自定义双向链表数组代替hashMap总结前言如果面试时考察的代码中,那么LRU缓存出现的频率是非常高的。博主在LeetCode中刷这道题已经不下十次了。已经总结出了该算法的思路。附上LRU缓存机制在LeetCode上的地址LRU的思想:将最近一次使用的时间作为衡量某个资源(如内存)的价值,最近一次使用的时间越久,它的价值就越小。实现LRU需要一个数据结构充当“缓存”,还需要一个数据结构用于保存实际的数原创 2021-04-14 18:52:46 · 516 阅读 · 0 评论