代码随想录\\242.有效的字母异位词\\349.两个数组的交集\\快乐数\\1.两数之和

242.有效的字母异位词

题意:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

思路:

用哈希表解题,在字符串s中遍历,定义一个26个空间的数组,a为1,b:2,以此类推。若在s中出现a,那么在数组a所对应的下标中,这个位置的元素自加一。再遍历t,出现的字母在数组中所对应的位置自减一。两步都结束后,如果数组中的元素都是0,那么证明字母在两个字符串中出现的次数相同,所以是字母异位词,反之不是。

注意点:

 不可以遍历s后,将出现的元素在数组中对应的位置设值为1,因为可能会出现重复的元素。

代码:

 两个数组的交集:

题意:给定两个数组,找出数组中重复的元素。

注意点:

题中只是说找重复的元素,那么如果有两个2,都重复了,那么我们其实只需要找一个2就可以了,所以是有一个去重的操作。并且是在一个数组里面找另一个数组的相同元素,所以这道题很适合用哈希表,并且因为要进行去重操作,所以可以用unordered_set 数据结构,(并且如果题目中的数,也就是哈希值很大的话,是不适合用数组操作的,因为浪费了很大的空间。)

说明unordered_set :是一种数据结构,他不对里面的元素进行排序,并且可以进行去重操作,他可以无限制的装元素,不会浪费空间。

思路:

先新定义个unordered_set result,用来装结果的,将一个数组转变成unordered_set形式,进行第一次去重操作,然后遍历第二个数组,看看再第一个数组中能否找到第二个数组元素的值,如果能找到,就放进result中,一直到遍历结束。

代码:

 

快乐数:

题意:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。

如果 n 是快乐数就返回 True ;不是,则返回 False 。

思路:

平方和是有可能重复的,而一旦重复就证明了进入了死循环,那么这个数就一定不是快乐数。大致流程为,创建unordered_set,让每一次平方和得出来的数,放入创建的哈希表中,然后如果这次循环得出来的数能在前一次循环中找得到,那么一定不是快乐数,返回false,如果平方和为一,那么返回true。

代码:

注意点:

在每次循环后,一定要写n=sum,重新给n赋值,求出新的sum。

两数之和

思路:由于我们在一个数组里找两个元素,并且还要返回下标,并且哈希值可能会很大,所以我们这里用std:ordered_map比较方便,可以同时储存下标和里面的值。

大致流程:

先创建map,然后遍历数组,如果再map中有能与当前遍历的值相加等于target的元素,那么返回数组下表,如果没有的话,将当前遍历的元素和所以对应的下标放入map中。

如果都没有 则返回空。

代码:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值