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

沈阳市网站建设哪里的公司比较好word做网站连接

沈阳市网站建设哪里的公司比较好,word做网站连接,装修案例图片,做了5天游戏推广被抓了1656. 设计有序流 - 力扣(LeetCode) 题目 有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流,以 任意 顺序获取 n 个 (id, value) …

1656. 设计有序流 - 力扣(LeetCode)

题目

有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。

设计一个流,以 任意 顺序获取 n 个 (id, value) 对,并在多次调用时 按 id 递增的顺序 返回一些值。

实现 OrderedStream 类:

  • OrderedStream(int n) 构造一个能接收 n 个值的流,并将当前指针 ptr 设为 1 。
  • String[] insert(int id, String value) 向流中存储新的 (id, value) 对。存储后:
    • 如果流存储有 id = ptr 的 (id, value) 对,则找出从 id = ptr 开始的 最长 id 连续递增序列 ,并 按顺序 返回与这些 id 关联的值的列表。然后,将 ptr 更新为最后那个  id + 1 。
    • 否则,返回一个空列表。

题目比较抽象,但是看动画很容易明白。

解法一

建立一个索引数组,如果差值为1,说明连续,就可以进行弹出。并且index加1 这里的写法不好理解
假如我有一个长度5的stream。然后一次放5,4,3,2,这时候index队列为
4 4 3 2 1
当放1的时候形成 5 4 3 2 1 就可以全部弹出。就像是楼梯一样。

class OrderedStream {int index = 1;int[] indexlist;String[] valuelist;public OrderedStream(int n) {indexlist = new int[n + 1];valuelist = new String[n + 1];}public List<String> insert(int idKey, String value) {for (int i = index; i <= idKey; i++) {indexlist[i]++;}valuelist[idKey] = value;List<String> list = new ArrayList<>();while ((index == indexlist.length - 1 && valuelist[indexlist.length - 1] != null)|| (index < indexlist.length - 1 && indexlist[index] == indexlist[index + 1] + 1)) {// index如果为最后一个,并且有值一定要弹出。如果不是最后一个需要判断是否和下一个差1list.add(valuelist[index]);index++;}return list;}
}

image.png

解法二 上面的思路比较乱,进行了简化
 class OrderedStream {  int index = 1;  HashMap<Integer, String> map;  public OrderedStream(int n) {  map = new HashMap<>();  }  public List<String> insert(int idKey, String value) {  map.put(idKey, value);  List<String> res = new ArrayList<>();  // 如果有,就加入队列弹出。并且index加一。这里覆盖了各种极端情况,弹出一个,越界等  while (map.get(index) != null) {  String s = map.get(index);  res.add(s);  index++;  }  return res;  }  
}

image.png

解法三 将上面的map改为数组
class OrderedStream {  int index = 1;  String[] valuelist;  public OrderedStream(int n) {  valuelist = new String[n + 1];  }  public List<String> insert(int idKey, String value) {  valuelist[idKey] = value;  List<String> res = new ArrayList<>();  // 如果有,就加入队列弹出。并且index加一。这里覆盖了各种极端情况,弹出一个,越界等  while (index != valuelist.length && valuelist[index] != null) {  String s = valuelist[index];  res.add(s);  index++;  }  return res;  }  
}

image.png

image.png
这已经是最优解了,刷新一下就变成了前百分之96了

总结

解法一没有很简洁,但是是最先想到的。反而越是简单精妙的结构,越是不好短时间抽象出来

http://www.dtcms.com/wzjs/542878.html

相关文章:

  • 不用ftp做网站h5表单制作
  • 搜索引擎优化seo的英文全称是合肥网站优化推广方案
  • 推荐个临汾做网站的唐山 建设工程信息网站
  • 如何做网站的薪酬调查网站品牌打造
  • 最常见企业网站公司有哪些设计科技公司官网
  • 网站平台建设实训体会北京门户网站网址
  • 用php做的网站实例网页设计模板套用步骤
  • 软件开发模型不包括seo怎么做网站的tdk
  • 网站建设文化服务wordpress加载特效
  • 网站开发简历项目wordpress编辑图片
  • 免费网站收录提交新塘网站建设
  • 夹江移动网站建设网站主题旁边的图标怎么做
  • 九江建网站公司有哪些网站建网站建设企业
  • 长春建站最新消息合肥高端网站
  • 鲜花网网站开发的意义郴州网站制作公司地址
  • 网页设计网站长沙苏州高新区建设局网站
  • 专业的医疗网站建设wordpress链接域名
  • 微信网站建设合同浙江做网站公司有哪些
  • 邹平做网站的联系方式双流区规划局建设局网站
  • 常德市住房和城乡建设局网站关键词推广和定向推广
  • 做博客网站用什么模板2013电子商务网站建设考试
  • 制作网站软件aso投放平台
  • 北京网站建设 app域名备案企业网站内容
  • 网站建设广告平台推广直播平台开发费用
  • 网站的论文怎么写网店设计装修
  • 网站推广如何收费查看别人网站的访问量
  • 家庭宽带做网站服务器吗网站标识描述可以填关键词吗
  • 百度指数怎么看城市seo优化的主要内容
  • 帮做ppt的网站湖北网中建设工程有限公司
  • 湛江网站建设费用有哪些营销型网站