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

专业做汽配的网站网站制作方案

专业做汽配的网站,网站制作方案,商标局网站可以做变更吗,网站统计页面模板RandomizedSet结构体存在切片和哈希表的原因: 变长数组由于可以根据下标定位到特定元素,因此可以在 O(1)的时间内完成获取随机元素操作,但是由于无法在 O(1) 的时间内判断元素是否存在,因此不能在 O(1) 的时间内完成插入和删除操作…

RandomizedSet结构体存在切片和哈希表的原因:

  1. 变长数组由于可以根据下标定位到特定元素,因此可以在 O(1)的时间内完成获取随机元素操作,但是由于无法在 O(1) 的时间内判断元素是否存在,因此不能在 O(1) 的时间内完成插入和删除操作。

  2. 哈希表可以在 O(1) 的时间内判断元素是否存在,因此可以在 O(1)的时间内完成插入和删除操作,但是不可以根据下标定位到特定元素,因此不能在 O(1) 的时间内完成获取随机元素操作。

    为了满足插入、删除和获取随机元素操作的时间复杂度都是 O(1),需要将变长数组和哈希表结合,变长数组中存储元素,哈希表中存储每个元素在变长数组中的下标。

  1. O(1) 时间插入、删除和获取随机元素
    实现RandomizedSet 类:
    RandomizedSet() 初始化 RandomizedSet 对象
    bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。
    bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。
    int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。
    你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1) 。
    示例:
    输入
    [“RandomizedSet”, “insert”, “remove”, “insert”, “getRandom”, “remove”, “insert”, “getRandom”]
    [[], [1], [2], [2], [], [1], [2], []]
    输出
    [null, true, false, true, 2, true, false, 2]
    解释
    RandomizedSet randomizedSet = new RandomizedSet();
    randomizedSet.insert(1); // 向集合中插入 1 。返回 true 表示 1 被成功地插入。
    randomizedSet.remove(2); // 返回 false ,表示集合中不存在 2 。
    randomizedSet.insert(2); // 向集合中插入 2 。返回 true 。集合现在包含 [1,2] 。
    randomizedSet.getRandom(); // getRandom 应随机返回 1 或 2 。
    randomizedSet.remove(1); // 从集合中移除 1 ,返回 true 。集合现在包含 [2] 。
    randomizedSet.insert(2); // 2 已在集合中,所以返回 false 。
    randomizedSet.getRandom(); // 由于 2 是集合中唯一的数字,getRandom 总是返回 2 。
type RandomizedSet struct {nums    []intindices map[int]int
}func Constructor() RandomizedSet {return RandomizedSet{nums:    make([]int, 0),indices: make(map[int]int),}
}func (this *RandomizedSet) Insert(val int) bool {if _, ok := this.indices[val]; ok {return false}// 在变长数组的末尾添加 valthis.nums = append(this.nums, val)//在添加 val 之前的变长数组长度为 val所在下标 index,将 val和下标 index 存入哈希表;// 因为要保证插入的值唯一,因此需要放在key的位置this.indices[val] = len(this.nums) - 1return true
}func (this *RandomizedSet) Remove(val int) bool {idx, ok := this.indices[val]if !ok {return false}lastIdx := len(this.nums) - 1lastVal := this.nums[lastIdx]this.nums[idx] = lastValthis.indices[lastVal] = idxdelete(this.indices, val)this.nums = this.nums[:lastIdx]return true
}func (this *RandomizedSet) GetRandom() int {randIdx := rand.Intn(len(this.nums))return this.nums[randIdx]
}// 变长数组可以在 O(1)的时间内完成获取随机元素操作,但是由于无法在 O(1) 的时间内判断元素是否存在,因此不能在 O(1) 的时间内完成插入和删除操作。哈希表可以在 O(1)的时间内完成插入和删除操作,但是由于无法根据下标定位到特定元素,因此不能在 O(1) 的时间内完成获取随机元素操作。
//为了满足插入、删除和获取随机元素操作的时间复杂度都是 O(1),需要将变长数组和哈希表结合,变长数组中存储元素,哈希表中存储每个元素在变长数组中的下标。/**1. Your RandomizedSet object will be instantiated and called as such:2. obj := Constructor();3. param_1 := obj.Insert(val);4. param_2 := obj.Remove(val);5. param_3 := obj.GetRandom();*/
  1. 插入操作时,首先判断 val是否在哈希表中,如果已经存在则返回 false,如果不存在则插入 val,操作如下:
    在变长数组的末尾添加 val;
    在添加 val之前的变长数组长度为 val所在下标 index,将 val\textit{val}val 和下标 index 存入哈希表;
    返回 true。
  2. 删除操作时,首先判断 val是否在哈希表中,如果不存在则返回 false,如果存在则删除 val,操作如下:
    从哈希表中获得 val的下标 index;
    将变长数组的最后一个元素 last移动到下标 index处,在哈希表中将 last 的下标更新为 index;
    在变长数组中删除最后一个元素,在哈希表中删除 val;
    返回 true。

删除操作的重点在于将变长数组的最后一个元素移动到待删除元素的下标处,然后删除变长数组的最后一个元素。该操作的时间复杂度是 O(1),且可以保证在删除操作之后变长数组中的所有元素的下标都连续,方便插入操作和获取随机元素操作。
(相当于把nums的最后一个元素lastval代替val在数组中的位置,同时也更新哈希表中lastval的值,最后截取数组,不要最后一个元素)

  1. 获取随机元素操作时,由于变长数组中的所有元素的下标都连续,因此随机选取一个下标,返回变长数组中该下标处的元素。
http://www.hkea.cn/news/80204/

相关文章:

  • 番禺网站建设公司排名百度推广页面投放
  • 沈阳做微网站百度收录刷排名
  • 网站建设与管理技术发展seo是什么意思如何实现
  • 手机游戏开发制作公司最新seo视频教程
  • 网站优化过度被k长春seo排名公司
  • wordpress移除谷歌字体seo网站推广与优化方案
  • 十大景观设计公司排名seo权重查询
  • 水友做的yyf网站十大免费引流平台
  • 东莞公司网站制作百度识图网页版 在线
  • 企业级网站内容管理解决方案网站关键词快速排名服务
  • 影视采集网站怎么做收录关键词是网站seo的核心工作
  • 开发一个网站需要多少时间百度账号免费注册
  • 化妆品网站主页设计长沙关键词优化方法
  • 南阳建网站企业百度推广优化工具
  • 怎样把自己做的网页放在网站里如何做宣传推广营销
  • 七谷网络工作室重庆优化seo
  • 东莞网站建设规范软文内容
  • 项目网站建设业务分析搜索优化的培训免费咨询
  • linux做网站服务器吗关键词上首页软件
  • 西安网站建设行业动态手机营销软件
  • 做推送的网站推荐今日新闻摘抄50字
  • 想在自己的网站做支付优化公司治理结构
  • 国内一家做国外酒店团购的网站网络推广优化是干啥的
  • 手机3d动画制作软件重庆网络seo公司
  • 青海和城乡建设厅网站石家庄自动seo
  • 建站网址是多少深圳市seo上词多少钱
  • 应用网站开发创建网站花钱吗
  • 2023太原疫情优化设计答案大全
  • 创新的专业网站建设适合小学生的新闻事件
  • 政府机关备案网站百度竞价什么意思