
hash
我要上岸!!!
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LintCode 526 Load Balancer
思路 要求三个方法都是O(1)的时间复杂度 使用一个HashMap存储server_id(key)和对应的index(value),可以使得put和remove的时间都为常数级 使用一个ArrayList存储所有的server_id,方便通过索引随机pick一台服务器 remove方法:在arraylist中删除元素,如果仅仅使用其自带的remove方法,时间复杂度为O(n), 因为相当于在数组中...原创 2019-03-17 13:20:24 · 424 阅读 · 0 评论 -
LeetCode 692 Top K Frequent Words
思路 自定义类Pair用于存储String和对应的出现次数。首先遍历一遍所有字符串,将所有字符串和其出现次数先存储在一个hashmap中;然后遍历整个hashmap,在创建pair的同时将其插入一个priority queue中(最小堆);最后将pq中的所有元素poll出来,然后做一个逆序后输出即可。 【需要自定义优先队列的比较器,因为参与排序的键有2个:freq和str的顺序。其中freq是越高...原创 2019-03-13 13:19:23 · 180 阅读 · 0 评论 -
LeetCode 527 / LintCode 639 Word Abbreviation
思路 根据给定的规则, 定义: (1)阶段数组prefix,存放当前字符串的位于的阶段; (2)定义一个保存结果的数组ans,存放当前阶段的缩写; (3)一个hashmap:count,用来记录当前结果ans在整个ans中的出现次数。 首先从头遍历一遍整个dict,记录好ans,prefix和hashmap 然后定义一个while(true)循环,里面一直更改重复的ans,直到所有的ans都唯一。...原创 2019-04-06 13:36:04 · 401 阅读 · 0 评论 -
LeetCode 438 Find All Anagrams in a String
思路 hash table + sliding window 分别建立对于s和p的hash table,大小为26。首先建立p的hash table,然后遍历s中的字符,建立s的hash table并且每加入一个新字符+去掉一个旧字符的同时,比较s_map和p_map的内容(耗时O(26) => O(1)),如果一致就将开头的索引加入结果list。 复杂度 时间复杂度O(n*26) = O(...原创 2019-04-02 12:27:22 · 177 阅读 · 0 评论 -
LeetCode 242 Valid Anagram
思路 使用2个hash table,依次记录s和t中字符的出现次数,最后比较1次即可。 复杂度 时间复杂度O(n), 空间复杂度O(1) 代码 public class Solution { /** * @param s: The first string * @param t: The second string * @return: true or fal...原创 2019-04-02 13:34:04 · 101 阅读 · 0 评论 -
LintCode 634 Word Squares (LeetCode 425)
思路 dfs+剪枝。这里是枚举型dfs:模拟多层嵌套的for循环。因为单词长度最多为5,所以最多5层循环,但是这里还是使用dfs来实现,目的一个是为了美观,另外也是为了如果遇到很多层循环要嵌套的作准备。dfs的过程就是在一个一个尝试所有的可能性,如果两个单词能依次放在一起,那么二者就有一条边相连。这里说一下剪枝的过程:(1)在放下一个单词的时候,直接从之前放过的单词里计算一个前缀prefix出来,...原创 2019-05-22 16:05:12 · 331 阅读 · 0 评论 -
LeetCode 409 Longest Palindrome
思路 统计字符出现次数,偶数的话直接加到sum里面,如果奇数的话减一后加到sum里面并且flag=1(标记)。最后sum要加上奇数标记flag(最后再加上1,因为所有的奇数频率中可以有一个放在正中间:aabbbcc,因此可以有一个奇数频率的字母不用-1, 但是flag是有用的,因为如果所有的字母出现次数都是偶数,那么就不需要-1了)。 技巧:字符哈希,int[128] charmap映射ASCI...原创 2019-06-23 16:02:31 · 98 阅读 · 0 评论