
哈希
会飞的蟋蟀
学习中!!
展开
-
luogu P1088 火星人
题解这道题用stl的next_permutation可以妙解,但是如果不让用你能不能想到别的方法呢? 这道全排列让我想起了那道著名的 八数码 的题目,里面有一种用阶乘做hash的方法,非常牛逼。 那种方法的学名叫做康托展开,可以把全排列的各种排列与自然数 实现一一映射。 有这个武器,这题的思路就很明显了,把给出的排列 康托展开 得出映射数 再加上增加值 再做逆展开。值得注意的是,这道...原创 2018-08-15 09:55:26 · 207 阅读 · 0 评论 -
LeetCode 49. Group Anagrams
题解这题就是哈希,让同样char的组合有同样的键值,注意防碰撞。用了素数表,字符数位的素数做乘积作为键。ps: 平时不写java,临时写一下遇到无数bug。常见的与c++ api 不同的就算了。比如 Arrays.asList(str),只可读不可写。。。List<List> 与 ArrayList< ArrayList > 不匹配。。。Codeclas...原创 2018-10-01 11:43:50 · 126 阅读 · 0 评论 -
LeetCode 560. Subarray Sum Equals K
题解看到连续子序列和,必然想到前缀和。但是光有前缀和这题还做不了,如何使得和为目标数目呢?此题和前面做过的一道4SUM有点像,关键还是用map来存储便于查询。设想 map[ sum ] 表示前缀和为sum的数量,那么当我们累计算得当前位置的和为sum时,我们考察 map[ sum - k ] 的数量,这就是一份使得 目标数k 成立的答案。看代码,很巧。Codeclass Solut...原创 2018-10-01 12:50:20 · 166 阅读 · 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) )即可。Codepubli...原创 2018-10-11 12:22:29 · 210 阅读 · 0 评论 -
LeetCode 554. Brick Wall
题解这题算是哈希的妙用,看代码体会一下。值得注意的是map与unordered_map 的效率差别很大。给出一篇文章比较map 与unordered_map Codeint leastBricks(vector<vector<int>>& wall) { int res=0; if(wall.empty()) return...原创 2018-10-12 09:57:49 · 151 阅读 · 0 评论