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

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

  哈希表的原理
  哈希表(又称散列表)的原理为:借助 哈希函数,将键映射到存储桶地址。更确切地说,
  首先开辟一定长度的,具有连续物理地址的桶数组;
  当我们插入一个新的键时,哈希函数将决定该键应该分配到哪个桶中,并将该键存储在相应的桶中;
  当我们想要搜索一个键时,哈希表将使用哈希函数来找到对应的桶,并在该桶中进行搜索。
  负载因子  又叫装填因子,是哈希表的一个重要参数,它反映了哈希表的装满程度。
  冲突解决 :线性试探法 链地址法 公共溢出区法 再哈希法
  哈希函数的性质
  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;     } };

iPhoneXS升级iOS15。4正式版3天深度评测,建议升级获得更好的体验iOS15。4正式版是一次重大的更新,这次除了给iPhone12以上的机型加入了口罩解锁,还给其他机型带来了不错的优化,那么iPhoneXS升级到iOS15。4有没有优化呢?下面就下午察阿里和腾讯大裁员刮起时代的沙尘暴?作者察客阳春三月是中国企业的招聘旺季,应届生跑校招往届生换工作都在3月和4月进行。然而在今年金三银四的求职黄金期,却传来互联网巨头阿里巴巴和腾讯即将大幅裁员的消息,规模达到数万人。数万人砍价不成功,拼多多为什么会如此回应?近日,主播直播间动员几万人参与拼多多砍一刀,称两小时内也没有成功。网友纷纷要拼多多给出一个回应。对此,拼多多向新浪科技回应称未砍成功不实,3月17日已砍价成功几万人参与砍价不实,主裁员风暴和股价暴跌下的互联网人原本大家都在呼吁反内卷,最近反而又偷偷卷起来了,生怕被淘汰。文中国企业家记者邓双琳刘哲铭编辑李薇图片来源视觉中国3月的北京已进入春天,但西二旗周遭依旧一片荒芜,丝毫不见青绿。目之所腾讯阿里优化裁员,背后的地产大变局前段时间,我们关注得较多的除了疫情的消息,就是互联网行业传出的要优化组织结构的消息。每次互联网企业的结构调整,都会引起我们的广泛关注,虽然说互联网行业只是其中的一个就业方向,真正的阿里巴巴的组织创新阿里巴巴的组织创新闲鱼的诞生阿里巴巴有很多成功的案例,讲一下闲鱼。闲鱼的产品经理找总裁汇报工作说我们要做一个新的产品,二手交易。总裁说淘宝上面不是有吗?他说想法不一样,手机拍个照就餐饮净水器一套下来要多少钱?我推荐你购买立升的全屋净水套装,前端净水器P0,超滤净水器LH38GD以及超滤伴侣M1,水量大,口感好,后期使用成本低,一套下来10000多元就可搞定。在这里,前置过滤器P0是对全禾川科技或临门突击申请专利昔日董秘离任未满一年成关联方发明人金证研北方资本中心秋汐作者出云映蔚风控2019年4月3日,浙江禾川科技股份有限公司(以下简称禾川科技)启动上市计划,开始接受上市辅导。而后同年12月,禾川科技因战略发展需要终止辅导裁员冲上热搜第一,互联网大厂腾讯阿里陷裁员风波阿里腾讯公司可是互联网行业的天花板,是很多高材生挤破头都想进去的大厂,但是由于近两年社会经济的下滑,第一个裁员的是爱奇艺作为典范拉开了裁员的序幕,紧接着嘀嘀打车教育行业等等一系列都山东连续5年聚力首版次高端软件研发作为全国软件产业大省,山东如何以软件产业高质量发展实现对经济社会发展的支撑和引领作用,一直是产业界关注的焦点。近日,山东第六批首版次高端软件申报工作正式启动,是山东第五年连续聚力首面试官Redis中的缓冲区了解吗hello大家好,我是七淅(x)。Redis大家肯定不陌生,但在使用层面看不到的地方,就容易被忽略。今天想和大家分享的内容是Redis各个缓冲区的作用溢出的后果及优化方向。在开始正
聚焦五大应用领域世界互联网大会发布14项领先科技成果来源人民网原创稿人民网乌镇9月26日电(记者许维娜)2021年世界互联网领先科技成果发布活动26日在乌镇举行,这是世界互联网大会第6次面向全球发布领先科技成果。作为世界互联网大会1家里插一节电器真能省电吗?家里插一节电器真能省电吗?关于家用节电器是一个老生常谈的话题。本人从事电力多年,许多年前就看见不少人购买这种里面的一只电容器,一个外包装,一个插头的东西。今天又在今日头条上看见有朋2021下半年如何选手机,老师傅提醒注意三点,外行人看后心领神会不混迹数码圈的人在选手机的时候一定都很苦恼,怎样才能选到适合自己的手机呢?回望上半年手机行业的发展,下半年外行人要买手机老师傅提醒这三点,心领神会后即使是外行人也不会踩坑。骁龙88从内到外深度定制OPPOFindX3Pro摄影师版购机即享千元礼包出品搜狐科技作者林国振9月16日晚,OPPOFindX3Pro摄影师版正式发布,借鉴复古相机的设计,金属质感的玻璃搭配黑荔枝纹理皮革,彰显出高级格调。作为摄影师版,新机还参考了相机指纹解锁如此方便,为何iPhone却不支持?提到手机的解锁方式,相信大家都有种安卓手机更为先进的感觉,毕竟许多手机都可以同时支持面部解锁和指纹解锁,非常方便,这时就不得不提提苹果的解锁方式了,即使上万元的苹果手机居然只支持面关于Miui13全新功能的探索做为米粉你们最喜欢MIUI13香系统有什么你最值得期待的全新功能呢?1。在桌面图标长按APP有快捷体验通道。长按APP选择二级迷你菜单背景图片图标有半透明效果,二级迷你菜单有毛玻璃荣耀MagicBook16Pro上架144HzR7GTX16509月24日消息,近日荣耀即将于9月26日发布的新款笔记本MagicBook16Pro2021已在电商平台上架。从目前产品页面上有限的信息看,荣耀MagicBook16Pro2021超曲面屏徕卡四摄鸿蒙系统,跌至3699元,华为5G旗舰机低价来袭华为再一次公布了鸿蒙系统的升级用户量,目前已经突破1。2亿,在短短3个月时间,升级用户量就达到这个数据,可见用户多么相信华为。而目前看来,华为鸿蒙系统的口碑还是很好的,大部分都给予中英美三国换机统计报告正式出炉这类人换新机速度最快国际知名研究机构StrategyAnalytics,近日发布了一份报告赢取智能手机市场的换机用户。这个报告主要针对中国英国和美国开展了一次智能手机消费者调研,从而调查出驱动消费者换姚安娜祝福姐姐回家却翻车,为什么大家喜欢孟晚舟,而不喜欢她?如果姚安娜毕业后投身华为,为华为贡献自己的聪明才智,一定会有很多人喜欢她的,但她却进入娱乐圈!而且是在华为被美国超级打压的情况下,她姐姐还在加拿大被扣押!两相比较,实在让人不喜欢她9月开学季丨手机主观推荐,一张图片让你清晰了解配置信息本文为主观推荐,仅代表作者观点,没有任何品牌倾向和利益关系。价格为最近几日的市场价,仅供参考(每天行情都略有变动,实际购买价以你当日为准)我们的推荐是以性价比为导向的,同价位中我们