算法
文章平均质量分 70
提升思维能力
HiccupTang
iOS developer
展开
-
相遇问题 - 时针与分针
问题时钟的时针分针每天重叠几次?什么时候重叠?解答分针比时针速度快,都做匀速圆周运动,所以分针可以周期性地赶上时针。不妨把屏幕分成60格(每两个数字之间5格)。分针的速度v1 = 1格/分钟时针的速度v2 = (1/12)格/分钟设经时间t两针相遇,得出:v1*t - v2*t = 60N (N = 0,1,2……)以上算式可得出 t= (720/11)N ,即他们每格65又5/11分钟相遇一次,总的相遇次数:24*60/(720/11)=22次...原创 2021-12-28 17:23:14 · 990 阅读 · 7 评论 -
哈希表 - 解决哈希冲突(总结)
什么是哈希表哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过关键码映射的位置去寻找存放值的地方。举例说明:新华字典中,获取“按”字详细信息,需要根据拼音an去查找拼音索引(当然也可以是偏旁索引),我们首先去查an在字典的位置,查了一下得到“安”。这过程就是键码映射,在公式里面,就是通过key去查找f(key)。其中,按就是关键字(key),f()就是字典索引,也就是哈希函数,查到的页码就是哈希值。一个好的哈希函数需要有以下特点:尽量使关键字对应的记录均匀分配在哈希表里面 关键字极小原创 2021-12-28 16:39:46 · 3453 阅读 · 3 评论 -
性能对比 - 数组、单链表、双链表
总结数组与链表区别原创 2021-12-28 11:34:04 · 1031 阅读 · 4 评论 -
缓存算法 - FIFO、LFU、LRU(思路梳理)
前言FIFO 核心原则:如果一个数据最先进入缓存中,则应该最早淘汰掉。LFU核心原则:如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小。LRU核心原则:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。FIFO(First in First out)需求分析get(key):如果Cache中存在该key,则返回对应的value值,否则,返回-1。set(key,value):如果Cache中存在该key,则重置value值;如果..原创 2021-12-28 10:40:44 · 904 阅读 · 1 评论 -
链表 - 单链表翻转(常见的四种方案)
前言所谓反转链表,就是将链表整体“反过来”,将头变成尾、尾变成头。那么,如何实现链表的反转呢?反转前:图 1 未反转的链表反转后:图 2 反转后的链表常用的实现方案有 4 种,这里分别将它们称为迭代反转法、递归反转法、就地逆置法和头插法。递归反转法更适用于反转不带头节点的链表;其它 3 种方法既能反转不带头节点的链表,也能反转带头节点的链表。本文以不带头节点的链表为例,给大家详细讲解各算法的实现思想。方案1:迭代反转链表该算法的实现思想非常直接,就是从当前链表的首原创 2021-12-27 23:21:16 · 1804 阅读 · 1 评论 -
链表 - 单链表中的环
前言关于单链表,有一些很经典的问题,在这里梳理一下(假设链表头指针为head)问题给一个单链表,判断其中是否有环的存在? 如果存在环,找出环的入口点? 如果存在环,求出环上节点的个数? 如果存在环,求出链表的长度? 如果存在环,求出环上距离任意一个节点最远的点(对面节点)? 如何判断两个无环链表是否相交? 如果两个无环链表相交,求出第一个相交的节点?解答【问题1】给一个单链表(链表头指针为head),判断其中是否有环的存在?采用“快慢指针”的方法,即创建两个指针fast和s原创 2021-12-27 17:58:57 · 600 阅读 · 1 评论