代码随想录刷题day6

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,

(*it).second会得到value。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值