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

建设网站推广文案网站流量排名

建设网站推广文案,网站流量排名,北湖建设局网站,阿里云模板建站怎么样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/452606.html

相关文章:

  • 网站建设制作包括哪些方面免费网站外链推广
  • 定西地网站建设近日网站收录查询
  • 用iis浏览网站百度关键词分析
  • 高端网站建设案例一键生成个人网站
  • 制作视频的软件app免费下载青岛神马排名优化
  • flash做企业网站宣传片网站排名优化专业定制
  • 网站长尾词私域运营软件
  • 中英文网站建设公司免费建网站的平台
  • 网站仿站教程长沙seo排名外包
  • 福田做网站价格杭州百度快照推广
  • 网站建设的重点是什么百度搜索引擎优化案例
  • 微信营销网站建设做网站
  • 备案 网站下线成都百度
  • 什么做的网站吗网站营销策划公司
  • 程序员做网站赚钱做百度推广员赚钱吗
  • 衡阳商城网站建设最近几天发生的新闻大事
  • 保健品网站建设背景中国站长
  • 温州网站建设 seo营销推广案例
  • 网站建设 图纸网网络公司关键词排名
  • 南昌网站建设费用网站seo需要用到哪些工具
  • 沈阳企业网站制作哪家好外链在线生成
  • 苏州建设职业培训中心网站金戈枸橼酸西地那非片
  • 邯郸市出租房屋信息网深圳百度快照优化
  • 河北省住建和城乡建设厅网站搜索引擎推广案例
  • c 如何做网站四川seo哪里有
  • 上海网站建设公司怎么分辨好坏百度竞价推广代理商
  • 安徽网络优化公司排名东莞搜索优化
  • 网站源码下载视频怎么自己弄一个平台
  • 做网站找沈阳横纵网络整合营销案例
  • 深圳做营销网站新手怎么学做电商