hash table summary

Hash table (easy) summary

1、其中关于计算数组中两个数字的和LeetCode1. Two Sum还是看一个string 中有没有重复,都是用map<int,int>index或者map<char,int>index.将原来的值作为键值,将下标作为值(LeetCode1.Two Sum),或者用index[nums[i]]++进行计数()

             for(inti=0;i<nums.size();i++)

                            {index[nums[i]]=i}     
2
  136. Single Number 两种方法:方法一:用set 如果是第一次就插入,如果是第二次就删掉。最后set里剩下的就是只出现一次的。方法二、采用异或。有两个数均为7,则两个数的二进制均为0111,两者异或,0111^0111=0000,结果为0,若有三个数7,5,7,则三者异或为0111^0101^0111=0101,结果为5,同理,对该数组所有的元素进行异或操作,出现两次的元素将抵消,最后剩下的结果就是只出现一次的元素。

2202. Happy Number 两层循环,一层计算平方和,一层循环不断地判断平方和为不为1.利用set 看是否第二次出现(即是否存在循环)。

3

方法一:普通判断质数的方法

方法二:厄拉多塞筛法

西元前250年,希腊数学家厄拉多塞(Eeatosthese)想到了一个非常美妙的质数筛法,减少了逐一检查每个数的的步骤,可以比较简单的从一大堆数字之中,筛选出质数来,这方法被称作厄拉多塞筛法(Sieve of Eeatosthese)

具体操作:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数 5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于 n 的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 n 的素数。

第一个循环是去掉所有的2的倍数,标为true。第二个循环是去掉2后面所有的数的倍数,标为true。第三个循环是找出素数(为false的数)。

4205. Isomorphic Strings 方法一: 建立一个char 类型的转换表,将s[i]替换一下。方法二:使用map计数,第一个出现的字母用1替换.第二个出现的字母用2替换,以此类推。次数用map.size()来算。

5217. Contains DuplicateLeetCode1. Two Sum中的是一个类型的(map计数)。并用interator通过判断计数值来进行操作。

6219. Contains Duplicate II这个题要注意 就是index[nums[i]]=i;是记录了重复数字第一次最新的在数组里的位置。当if(index.find(nums[i])!=index.end()&&(i-index[nums[i]])<=k)第二次在发发现,当前位置i和第一次最新的在数组里的位置的差就是他们之间的间隔。

7242. Valid AnagramLeetCode1. Two Sum中的是一个类型的(map计数),然后在另一个里面出现就减一。也可以采用一个数组进行计数。

8290. Word Pattern205. Isomorphic Strings中的是一个类型的,唯一不同的是对于单词的处理。

9349. Intersection of TwoArrays350. Intersection of Two Arrays II一样,先将其中一个计数,然后在另一个里面存在的话,就减一,一直循环。与242. Valid Anagram是一个类型的。

10389. Find the Difference242. Valid Anagram 349. Intersection of Two Arrays350. Intersection of Two ArraysII是一个类型的

11409. Longest PalindromeLeetCode1.Two Sum中的是一个类型的

12438. Find All Anagrams in aString双指针问题。Map里只有p的大小,如果匹配上,就删去,并且不断地将下标是i的压入。

13447. Number of Boomerangs注意对于每一个坐标都要重新申请mapMap要放在循环内。

14463. Island Perimeter从上、下、左、右四个方向计算。

15500. Keyboard Row 注意for(char ch:words[i])                    autoit=row1.find(ch);

      if(it==row1.end())

              f1=false;                        auto的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值