当前位置: 首页 > news >正文

flash网站大全微信搜索推广

flash网站大全,微信搜索推广,春节网页设计素材,学习吧网站实现RandomizedSet 类#xff1a; RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当元素 val 不存在时#xff0c;向集合中插入该项#xff0c;并返回 true #xff1b;否则#xff0c;返回 false 。 bool remove(int val) 当元素 val 存在时#xf…实现RandomizedSet 类 RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当元素 val 不存在时向集合中插入该项并返回 true 否则返回 false 。 bool remove(int val) 当元素 val 存在时从集合中移除该项并返回 true 否则返回 false 。 int getRandom() 随机返回现有集合中的一项测试用例保证调用此方法时集合中至少存在一个元素。每个元素应该有 相同的概率 被返回。 你必须实现类的所有函数并满足每个函数的 平均 时间复杂度为 O(1) 。 #include unordered_map #include vector #include cstdlibclass RandomizedSet { private:std::unordered_mapint, int valToIndex; // 用于存储值到索引的映射std::vectorint values; // 用于存储集合中的值public:/** Initialize your data structure here. */RandomizedSet() {}/** Inserts a value to the set. Returns true if the set did not already contain the specified element. */bool insert(int val) {if (valToIndex.find(val) ! valToIndex.end()) {return false; // 如果值已经存在则返回false}values.push_back(val); // 在向量末尾插入新值valToIndex[val] values.size() - 1; // 更新值到索引的映射return true;}/** Removes a value from the set. Returns true if the set contained the specified element. */bool remove(int val) {if (valToIndex.find(val) valToIndex.end()) {return false; // 如果值不存在则返回false}int index valToIndex[val]; // 获取值在向量中的索引int lastVal values.back(); // 获取向量中最后一个值values[index] lastVal; // 将最后一个值移到被删除的位置valToIndex[lastVal] index; // 更新最后一个值的索引values.pop_back(); // 删除最后一个值valToIndex.erase(val); // 删除值到索引的映射return true;}/** Get a random element from the set. */int getRandom() {int randomIndex rand() % values.size(); // 生成随机索引return values[randomIndex]; // 返回随机索引处的值} }; 使用了一个 unordered_map 来存储值到索引的映射以实现 O(1) 时间复杂度的插入和删除操作。同时使用一个 vector 来存储集合中的值并且通过将被删除元素与最后一个元素交换然后再删除最后一个元素的方式来实现 O(1) 时间复杂度的删除操作。最后getRandom 函数通过生成一个随机索引来随机返回集合中的一个元素。 易错点 从 nums 向量中删除特定值 val 对应的元素并且更新 indices 映射使得其仍然与 nums 同步。以下代码错误示范 nums.erase(nums.begin()indices[val]); indices.erase(val);假设 indices[val] 给出了 val 在 nums 中的索引位置。第一行代码是从 nums 向量中删除这个索引位置的元素但是删除后后面的元素会向前移动填补被删除的位置这就会导致原来在 indices[val] 位置的元素变成了新的 val而且 val 在 nums 中的位置已经改变了所以删除 val 对应的索引值并不正确。 正确的做法是通过交换最后一个元素和要删除的元素来实现删除然后更新映射。这就是下面的代码片段 int index indices[val]; int last nums.back(); nums[index] last; indices[last] index; nums.pop_back(); indices.erase(val);这样做的好处是它避免了在删除元素后重新排序 nums 向量同时保持了 indices 映射的正确性。
http://www.zqtcl.cn/news/517444/

相关文章:

  • 中山网站建设工作修改wordpress后台地址
  • 西安app网站开发如何制作一个自己的网页
  • 陇西学做网站鄂州网约车
  • 做类似58类型网站免费源码分享
  • 个人做的网站有什么危险网站模板怎样发布
  • 设计建设网站公司网站wordpress k2
  • 公司网站被抄袭网络宣传
  • 企业网站设计收费专业网络推广公司排名
  • 视频网站模板源码深圳网站建设明细报价表
  • nike官方网站定制二级域名网站有哪些
  • 越秀移动网站建设房门户网站如何做优化
  • 什么软件可以做动漫视频网站开发一个小程序大概要多少钱
  • 微网站可以做成域名访问株洲网站做的好的公司
  • 建设网站去工信部备案需要什么资料网站建设相关博客
  • 十度网站建设网站建立的企业
  • 婚庆公司网站国外网站阻止国内访问怎么做
  • 乐山高端网站建设wordpress openload
  • 哪些网站上可以做租车深圳品牌网站开发
  • 乐清网站改版公司西安网站建设公司哪家好
  • 国外小型网站1688货源网下载
  • 浏览量最大的网站网站导航栏目设计内容依据
  • 户外拓展公司网站开发桂林网站开发
  • 怎么入侵网站后台互联网营销师含金量
  • 网站建设ningqueseo济南网站建设服务
  • 做网站给女朋友品牌网站建设只询大蝌蚪
  • 厦门服装商城网站建设米课做网站
  • ui做网站实例一起做网店网站官方
  • 网站建设合同怎么写wordpress如何设置404页面
  • wordpress 安装过程顺德网站优化
  • 大麦网网站建设的功能定位wordpress图片不被收录