范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

哈希表和哈希函数及相关练习

  哈希表的原理
  哈希表(又称散列表)的原理为:借助 哈希函数,将键映射到存储桶地址。更确切地说,
  首先开辟一定长度的,具有连续物理地址的桶数组;
  当我们插入一个新的键时,哈希函数将决定该键应该分配到哪个桶中,并将该键存储在相应的桶中;
  当我们想要搜索一个键时,哈希表将使用哈希函数来找到对应的桶,并在该桶中进行搜索。
  负载因子  又叫装填因子,是哈希表的一个重要参数,它反映了哈希表的装满程度。
  冲突解决 :线性试探法 链地址法 公共溢出区法 再哈希法
  哈希函数的性质
  1)input 无穷
  2)output s 固定大小
  3)insame outsame
  4)输入输出会发生碰撞
  5)具有离散性
  哈希函数的特征
  1)相同输入导致相同输出
  2)不同输入均匀分布
  设计一个哈希集合
  不使用任何内建的哈希表库设计一个哈希集合(HashSet)。
  实现 MyHashSet 类:
  void add(key) 向哈希集合中插入值 key 。
  bool contains(key) 返回哈希集合中是否存在这个值 key 。
  void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。  #define MAX_LEN 100000          // 初始化桶的数量  class MyHashSet { private:     vector set[MAX_LEN];   // 使用数组实现哈希集合          /** 返回对应的桶的索引 */     int getIndex(int key) {         return key % MAX_LEN;     }          /** 在特定的桶中搜索键,如果该键不存在则返回 -1 */     int getPos(int key, int index) {         // 每个桶中包含一个列表,遍历所有桶中的元素来寻找特定的键         for (int i = 0; i < set[index].size(); ++i) {             if (set[index][i] == key) {                 return i;             }         }         return -1;     } public:          MyHashSet() {              }          void add(int key) {         int index = getIndex(key);         int pos = getPos(key, index);         if (pos < 0) {             // 如果键不存在,则添加             set[index].push_back(key);         }     }          void remove(int key) {         int index = getIndex(key);         int pos = getPos(key, index);         if (pos >= 0) {             // 如果键存在,则删除             set[index].erase(set[index].begin() + pos);         }     }          bool contains(int key) {         int index = getIndex(key);         int pos = getPos(key, index);         return pos >= 0;     } };  //哈希集合的操作 #include                  int main() {     // 1. 初始化哈希集     unordered_set hashset;        // 2. 新增键     hashset.insert(3);     hashset.insert(2);     hashset.insert(1);     // 3. 删除键     hashset.erase(2);     // 4. 查询键是否包含在哈希集合中     if (hashset.count(2) <= 0) {         cout << "键 2 不在哈希集合中" << endl;     }     // 5. 哈希集合的大小     cout << "哈希集合的大小为: " << hashset.size() << endl;      // 6. 遍历哈希集合     for (auto it = hashset.begin(); it != hashset.end(); ++it) {         cout << (*it) << " ";     }     cout << "在哈希集合中" << endl;     // 7. 清空哈希集合     hashset.clear();     // 8. 查看哈希集合是否为空     if (hashset.empty()) {         cout << "哈希集合为空!" << endl;     } }   /*  * 使用哈希集合寻找重复元素的模板  */ bool findDuplicates(vector& keys) {     // 将 type 替换为 keys 的实际类型     unordered_set hashset;     for (Type key : keys) {         if (hashset.count(key) > 0) {             return true;         }         hashset.insert(key);     }     return false; }
  设计一个哈希映射
  不使用任何内建的哈希表库设计一个哈希映射(HashMap)。
  实现 MyHashMap 类:
  MyHashMap() 用空映射初始化对象
  void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。
  int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。
  void remove(key) 如果映射中存在 key 的映射,则移除 key 和它所对应的 value 。  #define MAX_LEN 100000            // 初始化桶的数量  class MyHashMap { private:     vector> map[MAX_LEN];       // 使用数组实现哈希集合          /** 返回指定桶的索引 */     int getIndex(int key) {         return key % MAX_LEN;     }          /** 在桶中搜索键,如果不存在则返回 -1 */     int getPos(int key, int index) {         // 每个桶包含一个数组,遍历桶中的所有元素来查找指定的 key         for (int i = 0; i < map[index].size(); ++i) {             if (map[index][i].first == key) {                 return i;             }         }         return -1;     }      public:     MyHashMap() {              }          /** value 始终为正 */     void put(int key, int value) {         int index = getIndex(key);         int pos = getPos(key, index);         if (pos < 0) {             map[index].push_back(make_pair(key, value));         } else {             map[index][pos].second = value;         }     }          /** 如果存在映射关系,则返回 value,否则返回 -1 */     int get(int key) {         int index = getIndex(key);         int pos = getPos(key, index);         if (pos < 0) {             return -1;         } else {             return map[index][pos].second;         }     }          /** 如果存在 key 的映射,则删除该映射关系 */     void remove(int key) {         int index = getIndex(key);         int pos = getPos(key, index);         if (pos >= 0) {             map[index].erase(map[index].begin() + pos);         }     } };
  给你一个整数数组  nums 。如果任一值在数组中出现 至少两次 ,返回  true ;如果数组中每个元素互不相同,返回  false 。 class Solution { public:     bool containsDuplicate(vector& nums)           {          unordered_set set;          for(int i=0;i& nums) {      unordered_set hash;      for(int x:nums)      {          if(hash.find(x) == hash.end())         hash.insert(x);         else         hash.erase(x);      }      return *hash.begin();     } };
  给定两个数组  nums1 和  nums2 ,返回  它们的交集  。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 class Solution { public:     vector intersection(vector& nums1, vector& nums2) {     sort(nums1.begin(),nums1.end());     sort(nums2.begin(),nums2.end());     vectorvec;//指针变量     int flag=INT_MIN;     for(int i=0,j=0;inums2[j])         j++;         else         {             if(nums1[i]!=flag)         vec.push_back(nums1[i]);         flag=nums1[i];         i++;         j++;         }     }     return  vec;     } };

MIUI13升级体验(小米10)MIUI13升级体验(小米10)MIUI最近稳定版的MIUI13终于更新啦!捂脸如果要说去年的谁家的的系统被吐槽得最严重,当属小米的MIUI12了,BUG不断突然死机等问题不断,雷红米放出大招,2399起售的K50比苹果更香说实话每次苹果的发布会落下帷幕之后,总能引发人们激烈的讨论,就像苹果的春季发布会,截止已经有一段时间了,这次发布会上发布的苹果手机也会被各家品牌拿来比较。在发布会上发布的iPhonPython基于selenium实现不同商城的商品价格差异分析系统1。前言selenium原本是一款自动化测试工具,因其出色的页面数据解析和用户行为模拟能力而常用于爬虫程序中,致使爬虫程序的爬取过程更简单快捷。爬虫程序与其它类型程序相比较,本质一OPPOReno8Pro秀肌肉,4800mAh5nm,有12512G版本自从国产智能手机崛起后,近段时间国内智能手机市场的热度确实越来越高了,而且随着新机的不断预热,大部分之前发布的旗舰机型在价格上也做出了妥协,可以说这几年国产智能手机市场产品的更新换麒麟操作系统基础知识最初的目标是要在电脑启动的时候,自动加载网上共享的文件夹。类linux操作系统可以使用mount命令挂载网络共享文件夹,但是一旦电脑重新启动以后,所有挂载的文件夹都会丢失,需要重新马岭水利枢纽工程成为贵州首个5G全覆盖的大型水利工程多彩贵州网讯近日,贵州省水利投资集团马岭公司与和贵州省移动公司在马岭水利枢纽工程地下发电厂房前举行5G新型工业信息化共创基地揭牌仪式。马岭水利枢纽工程成为贵州第一个实现5G覆盖的大五千以内的笔记本电脑,独立显卡,有什么推荐?1。神舟Z7TTA5NS百亿补贴参考价4799配置CPUI511400H显卡RTX3050TI内存条英睿达16GBddr43200MHz硬盘512M。2SSD屏幕15。6英寸45色华为MateX3新爆料120Hz超大显示屏7000mAh大电池,你期待吗?哈喽,您好!我是原呵呵,点点关注吧,更多精彩内容等着您华为的第一款可折叠手机感觉就像是遥远的记忆。该公司于2019年宣布,在发布之前又回到了绘图板上,因为三星在创新外形方面遇到了自小米12Pro真实使用体验分享,设计手感是亮点大家好,今天我们来聊聊我对小米12Pro的真实使用感受,我使用这款手机快两个月了,我对它有很多想法,现在让我从不同的方面带你们了解小米12Pro。如果让我选一个我会一直用这款手机的劳斯莱斯闪灵再次曝光,预计2024年上市近日,劳斯莱斯首款电动车闪灵(Spectre)在瑞典的冬季测试谍照曝光了。新车依旧采用双门设计,反向开启(suicidaldoor)。跟之前的曝光的谍照相比,这次冬季测试照并没有太老罗即将重回科技圈,新公司不会叫锤子今年年初的时候,罗永浩就表示还完债的当天就回重返科技行业。至于做手机是不可能了,毕竟现在手机行业的竞争过于激烈,留给小厂的生存空间实在太小了。近日36氪爆料,罗永浩将会在五月份前后
微软宣布将基本淘汰IE浏览器,你会觉得遗憾吗?不用说ie,就是微软消失了,很快就会有新的产品替代。可以替代的产品类的东西能有多大遗憾呢!!!我们遗憾的往往是一些不可逆的事情的发生!假如谷歌突然跳出来,宣布将于某年某月某日关闭C什么东西一旦申请专利就可以瞬间成为全球首富?已经有两个了,但是国家不准申请专利,也不能随便用,只限低剂量小范围使用。一个是干细胞技术,可以淘汰目前绝大多数药品和美容技术,甚至可使人长生不老。因为牵扯到一系列伦理和社会问题,甚华为是否还会研发下一代旗舰处理器?3nm工艺麒麟9010给出答案在如何抑制华为公司高速发展的这个问题上美国没少下功夫,芯片成为了其中一项致命的利器。先是禁止了国内芯片企业对华为的供货(高通),华为无奈启动了备胎计划,不甘心计划就此落空的美国,彻OPPOReno6设计曝光看起来这次主打新的配色?比5代好看?OPPOReno6系列基本算是完全曝光了,配置和设计都曝光了,当然从配置看,还可以,但是这次看起来配色有意思?这一次升级了晶钻设计,也就是让后盖看起来更加亮眼,而且看起来视觉效果更我想换血糖仪,哪个牌子血糖仪准确?很高兴回答这个问题,我是糖伯虎(糖尿病的糖)哪一个血糖仪准确呢?我和大家分享的五点做法,都是我亲身经历的。首先,市面上有很多品牌的血糖仪,琳琅满目,目不暇接。血糖仪是广大糖友的刚需肺癌治疗靶向药物有哪些?鱼和熊掌可兼得,谈谈第三代靶向神药泰瑞沙肺癌是我国最常见的恶性肿瘤,它的发病率和死亡率在我国均为第一,我国每年约有60万患者死于肺癌。目前,肺癌的治疗仍是以手术为主,早期患者甚至术最想暴富的年轻人在币圈75倍杠杆,一天20个小时,我就是想发横财本文来源时代财经作者于小娟又亏五千,群里老哥们给介绍一下好点的电子厂。我合约开空,这个星期我就看它空!5月21日深夜,众多加密货币交流群的信息栏显示着99的状态,而这一切都源自比特为什么说人工智能工作前景越来越严峻了?目前正在从事ai相关工作,从自己的角度讲一下吧。1现在的人工智能并不是真正的智能,相比人类的大脑来说,连幼儿都比不过。目前的人工智能只能从很多先验知识中学习一些强大且较为通用的规则性价比最高的华为手机华为p40lite因为美国的制裁,华为手机造不出芯片手机业务只能被迫下线,这也使得华为手机一度被疯抢和各种疯狂加价不过p40有一款平价版的p40lite(青春版),小编今天给大家介绍一下他的参数吧!时评机器狗非狗,出门遛它归哪部法律管?来源新京报机器狗非狗,出门遛它归哪部法律管?观察家人工智能商品化刚刚开始,但也当充分考虑其可能存在的法律问题。出门遛机器狗,而且是正大光明地不牵狗绳,是不是很酷?你大概刷到过朋友圈世界上存在着三大未解之谜,一是人的身体之谜,二是地球内核之谜,三是浩翰宇宙之谜,这些都因何成谜?人类是号称智慧超群的灵类,万物之中一花独秀。但是人类独独不能了解自己的身世,是野生的还是外来的,抑或野生与外来混血的。造成了宗教丶进化论和龙的传人等多种社会形态。智慧在大自然面前也