代码随想录第六天|242.有效的字母异位词、349.两个数组的交集、1.两数之和

242.有效的字母异位词

思路:

建立2个size=26的数组作为哈希表,分别存储字符串的字母个数情况,然后循环对比两个数组相对位置的数据是否相同。出现不同为false,否则为真。

看视频后:

用一个数组即可,分别循环一遍字符串,通过-1,0,1的状态判断有效情况。


349.两个数组的交集

思路:

用数组作为哈希表,但没想到怎么解

看视频后:

本题在改成元素少于1000后可以用数组存储,建议用set

用数组:使用unordered_set存储结果result,第一个数组hash[nums1[i]]=1,第二个数组发现hash[nums2[j]==1]则将nums2[j]插入result.用result.insert();最后改成vector<int>形式

vector<int>(result.begin(),result.end())

用set: unordered_set 建立result_set和nums1_set, nums1_set放入nums1的元素,然后遍历nums2,如果发现nums2里有相同元素就放入result_set,最后改成vector<int>形式



202. 快乐数

思路:

循环尽可能大的次数,如果在该次数内n都没变成1,那么就不是快乐数。卡在循环条件上。

看代码后:

使用set存储每次的sum后有三种情况:1.sum==1 2.sum在set内 3. sum不在set内。只需要判断sum是否重复出现。

可以将求和单独做成函数。


1.两数之和

思路:

1.用暴力遍历每一位和其后面位的和,找到和为target的就return,否则最后return{-1,-1}

看视频后:

为什么使用哈希表?为什么使用map?map是用来做什么的?map里面的key和value是存什么的?

1. map存放了遍历过的元素,在遇到新元素时找map里是否有相对的元素。

2. 不确定数组的大小和分布,而且需要存放数组的下标,但本题不需要排序,所以用unordered—_map;

3.map是用来存放遍历过的元素的值和下标

4.key存放值,value存放下标

unordered_map <int,int>map;

用auto iter=map.find(target-nums[i])

iter->second为value,

map.insert(pair<int,int>(nums[i],i));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容