
哈希
会飞的蟋蟀
学习中!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
luogu P1088 火星人
题解 这道题用stl的next_permutation可以妙解,但是如果不让用你能不能想到别的方法呢? 这道全排列让我想起了那道著名的 八数码 的题目,里面有一种用阶乘做hash的方法,非常牛逼。 那种方法的学名叫做康托展开,可以把全排列的各种排列与自然数 实现一一映射。 有这个武器,这题的思路就很明显了,把给出的排列 康托展开 得出映射数 再加上增加值 再做逆展开。 值得注意的是,这道...原创 2018-08-15 09:55:26 · 226 阅读 · 0 评论 -
LeetCode 49. Group Anagrams
题解 这题就是哈希,让同样char的组合有同样的键值,注意防碰撞。 用了素数表,字符数位的素数做乘积作为键。 ps: 平时不写java,临时写一下遇到无数bug。常见的与c++ api 不同的就算了。 比如 Arrays.asList(str),只可读不可写。。。 List<List> 与 ArrayList< ArrayList > 不匹配。。。 Code clas...原创 2018-10-01 11:43:50 · 140 阅读 · 0 评论 -
LeetCode 560. Subarray Sum Equals K
题解 看到连续子序列和,必然想到前缀和。但是光有前缀和这题还做不了,如何使得和为目标数目呢? 此题和前面做过的一道4SUM有点像,关键还是用map来存储便于查询。 设想 map[ sum ] 表示前缀和为sum的数量,那么当我们累计算得当前位置的和为sum时, 我们考察 map[ sum - k ] 的数量,这就是一份使得 目标数k 成立的答案。 看代码,很巧。 Code class Solut...原创 2018-10-01 12:50:20 · 192 阅读 · 0 评论 -
LeetCode 781. Rabbits in Forest
题解 这题很有意思。 想想,有兔子说有 x 个同色兔子,那么其实就是说有 x+1 个兔子同色。 换言之,这个 x 最多可以在数组中重复 x+1 次,但是显然 x 可以出现任意次。 少于 x+1 就意味着有部分兔子没说话,多余则表示还有另外颜色的兔子 也有 x+1 个。 所以,此题用map记录 x 的次数。然后算 (x+1) * ceil( map[x]/(x+1) )即可。 Code publi...原创 2018-10-11 12:22:29 · 235 阅读 · 0 评论 -
LeetCode 554. Brick Wall
题解 这题算是哈希的妙用,看代码体会一下。 值得注意的是map与unordered_map 的效率差别很大。 给出一篇文章比较map 与unordered_map Code int leastBricks(vector<vector<int>>& wall) { int res=0; if(wall.empty()) return...原创 2018-10-12 09:57:49 · 171 阅读 · 0 评论