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

网站建设08keji在线图片编辑器下载

网站建设08keji,在线图片编辑器下载,怎么做一个简易网站,做网站开发app题目 设计一个数据结构,使如下3个操作的时间复杂度都是O(1)。 insert(value):如果数据集中不包含一个数值,则把它添加到数据集中。remove(value):如果数据集…

题目

设计一个数据结构,使如下3个操作的时间复杂度都是O(1)。

  • insert(value):如果数据集中不包含一个数值,则把它添加到数据集中。
  • remove(value):如果数据集中包含一个数值,则把它删除。
  • getRandom():随机返回数据集中的一个数值,要求数据集中每个数字被返回的概率都相同。

分析

由于题目要求插入和删除(包括判断数据集中是否包含一个数值)的时间复杂度都是O(1),能够同时满足这些时间效率要求的只有哈希表,因此这个数据结构要用到哈希表。但是如果只用哈希表,则不能等概率地返回其中的每个数值。

如果数值是保存在数组中的,那么很容易实现等概率返回数组中的每个数值。假设数组的长度是n,那么等概率随机生成从0到n-1的一个数字。如果生成的随机数是i,则返回数组中下标为i的数值。由此可以发现,需要结合哈希表和数组的特性来设计这个数据容器。

由于数值保存在数组中,因此需要知道每个数值在数组中的位置,否则在删除的时候就必须顺序扫描整个数组才能找到待删除的数值,那就需要O(n)的时间。通常把每个数值在数组中的位置信息保存到一个HashMap中,HashMap的键是数值,而对应的值为它在数组中的位置。

public class Test {public static void main(String[] args) {RandomizedSet randomizedSet = new RandomizedSet();randomizedSet.insert(1);randomizedSet.insert(2);randomizedSet.insert(3);randomizedSet.insert(4);for (int i = 0; i < randomizedSet.nums.size(); i++) {System.out.println(randomizedSet.nums.get(i));}System.out.println("-----------------------");randomizedSet.remove(2);for (int i = 0; i < randomizedSet.nums.size(); i++) {System.out.println(randomizedSet.nums.get(i));}System.out.println("-----------------------");System.out.println(randomizedSet.getRandom());}static class RandomizedSet {HashMap<Integer, Integer> numToLocation;ArrayList<Integer> nums;public RandomizedSet() {numToLocation = new HashMap<>();nums = new ArrayList<>();}public boolean insert(int val) {if (numToLocation.containsKey(val)) {return false;}numToLocation.put(val, nums.size());nums.add(val);return true;}public boolean remove(int val) {if (!numToLocation.containsKey(val)) {return false;}int location = numToLocation.get(val);numToLocation.put(nums.get(nums.size() - 1), location);numToLocation.remove(val);nums.set(location, nums.get(nums.size() - 1));nums.remove(nums.size() - 1);return true;}public int getRandom() {Random random = new Random();int r = random.nextInt(nums.size());return nums.get(r);}}
}
http://www.yayakq.cn/news/108932/

相关文章:

  • 黑龙江省城乡和建设厅网站企业购网站建设
  • 货车保险哪家网站可以直接做软件系统开发流程图
  • wordpress文章大网站公司网站的用途
  • 建设工程合同备案网站在网上怎么做网站
  • 个人资料网站怎么做青岛胶南做网站的
  • 如何查看网站是不是wordpress韶关市开发区建设局网站
  • 苏州网站开发公司兴田德润简介网站建设栏目分级
  • 做最好的网站html5手机网站开发工具
  • asp 网站名字泉州做网站需要多少钱
  • 官方网站app大全大连旅顺口区房价
  • 网站开发设计总结及心得体会莱阳做网站的
  • 国内开源网站网站手机开
  • 怎样看网站建设长春网站建设模板样式
  • 支持api网站开发pc网站优势
  • 淮安做微信网站免费ppt模板下载熊猫
  • 深圳大学网站建设茶文化网站网页设计
  • 优秀设计师个人网站2022华为云营销季
  • 那些做seo的网站北京免费网站开发维护
  • 国外购物网站有哪些小程序定制开发报价
  • 招聘网站建设维护人员一个logo设计要多少钱
  • 免费网站制作多少钱深圳市城乡建设部网站首页
  • 钟表东莞网站建设福田欧辉新能源公交车
  • 网站不想让百度收录宁波建设公司网站
  • 同行做的好的网站做电影网站违法
  • 免费注册网站的平台怎么做网站演示
  • 绥化建设局网站怎么建企业网站
  • 天乐测绘网做网站吗注册域名查询网站官网
  • 上海网站建设shzanen知名的家居行业网站制作
  • 同江佳木斯网站建设濮阳市做网站
  • 网站只做静态页面安全受到影响seo营销学校