242.有效的字母异位词
用数组实现哈希; 注意初始化;
int storage[26] = {0}; //定义数组的方法: 数据类型 数组名[数组长度]; 这时候index从 0 - 25;注意要初始化这个数组,不初始化会报错
349. 两个数组的交集
用unoderset来实现哈希,注意unorderset容器内部直接就做了去重操作
要注意的点:使用数组来做哈希的题目,是因为题目都限制了数值的大小。 而这道题目没有限制数值的大小,就无法使用数组来做哈希表了。而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费
范围for循环, c++11的新特性,专门给容器用的:for (int num : nums2);从nums2的int型数组中依次将值赋值给num,将num带入for语句代码块中执行。
等效于: int num; for(int i=0;i<nums.length;i++) { num=nums2[i]; }
for (int num : nums2) {
// 发现nums2的元素 在nums_set里又出现过
if (nums_set.find(num) != nums_set.end()) {
result_set.insert(num);
}
}
寻找比较这个需要理解: 如果找到了num, find函数就返回迭代器, 如果没找到就会返回num.set.end(), 因此这里的!= 相当于找到了。 c++ STL 需要再学习下
202. 快乐数
把sum的结果存在一个unorder的set里面, 其他的很好理解;
1. 两数之和
这道题以前用暴力法做过,代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i,j;
for( i=0;i< nums.size();i++)
{
for( j=i+1; j<(nums.size());j++){
if(nums[i] + nums[j] == target)
{return {i,j};}
}
}
return {i,j};
}
};
这次使用哈希来做, 使用map结构,理由如下:
- 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
- set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。
此时就要选择另一种数据结构:map , map中的存储结构为 {key:数据元素,value:数组元素对应的下标}。要学习下map的各种使用方法;
return {iter->second, i};
上面语句解释如下:
(*it).first
会得到key,文章来源:https://www.toymoban.com/news/detail-439040.html
(*it).second
会得到value。文章来源地址https://www.toymoban.com/news/detail-439040.html
到了这里,关于代码随想录刷题day6的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!