Hash
Mamba_ZJP
这个作者很懒,什么都没留下…
展开
-
快速得到某段区间的左端点和右端点
为了快速得到一段连续区间的左右端点:利用左端点,快速求得右端点;利用右端点,快速求得左端点。我们可以建立两个左右端点映射L,R。L[p]映射这段连续区间的左端点,R[p]映射这段连续区间的右端点:给区间[l,r], L[r]=l, R[l]=r。1. LeetCode 352传送门:https://leetcode-cn.com/problems/data-stream-as-disjoint-intervals/submissions/分析题意,直接可以分两种情况。1、val在某段区间里,.原创 2020-08-23 17:18:44 · 1605 阅读 · 0 评论 -
原地哈希/LeetCode [41/442/448]
这种原地哈希算法适用于和正整数有关,且数字范围和数组长度有关的题目里,映射之后能利用映射关系(下标和值一一对应)来找到解。1.题目链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/由于不能使用额外空间,哈希表等其他数据结构就无法使用了。我们采取一种特殊的原地哈希:f(nums[i]) = num[i] - 1,也就是将值为nums[i]的数字映射到nums[i]-1的下标位置,例:3映射到数.原创 2020-06-27 22:19:35 · 432 阅读 · 0 评论 -
LeetCode 974/前缀和/哈希表/取模和取余
子数组串 -> 暴力+前缀和 -> TLE同余定理:这里使用同余定理:(a-b)/m为整数 -> a与b对模m同余对模m同余:当两个整数除以同一个正整数n,若得相同余数(正数),则…所以(pre[j]-pre[i - 1])modK==0 -> pre[j] mod K == pre[i - 1] mod K这样我们就不用管i的位置了,只要统计pre[i - 1] mod K这个结果在前面已经遍历过程中出现了几次就可以了,自然想到实现一个字典(以取模的结果为key,valu..原创 2020-05-27 13:44:26 · 389 阅读 · 0 评论 -
LRU/LeetCode 146
题目链接:https://leetcode-cn.com/problems/lru-cache/快速查找到这个元素不难想到:哈希表。关键是如何再设计一个数据结构去O(1)删除和插入,这样子的话很明显必须是个线性结构了(链表、栈、队列(这俩个只能在头尾)等),但是发现我们可能需要在线性结构中间删除某个元素(当key相同的时候,我们需要更新value),假如不会出现相同值的情况也只能用deque(因为头尾都需要可以进行操作),所以我们在这里选择链表。那么就很好办了,哈希映射链表中的位置(迭代器),因为原创 2020-05-25 16:25:04 · 145 阅读 · 0 评论 -
哈希/散列法/LeetCode例题
说到哈希,总感觉到它很高深,说到底它只不过是实现集合和字典(满足数据增删改查的结构)的一种方式,而不是总把它当成单独的一种数据结构或者算法去讨论。散列法:定义:将数据中key传给一个哈希函数f(),按照计算出来的哈希值h=f(key)将那个带有key的数据分布到一个哈希表中(大小m自定义)。当m<数据量n的时候,会出现碰撞,甚至大于等于的时候也会出现(取决于哈希函数),所以此时需...原创 2020-04-21 11:03:02 · 243 阅读 · 0 评论