当前位置: 首页 > 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/547681.html

相关文章:

  • 汕头企业网站公司网站设置文件夹权限
  • 个人开网站删除wordpress网页无用
  • 青岛高端网站设计哪家一份完整的活动策划方案
  • 做招聘求职网站o2o网站开发相关技术
  • 商务网站开发综合实训保定企业官网搭建
  • 农畜产品销售平台的网站建设angular wordpress
  • 快速关键词排名首页长春网站seo报价
  • 企业网站建设合同书做视频资源网站有哪些
  • 微网站报价wordpress前台登录插件
  • 网站建设流程分为哪几个阶段设计业务网站
  • 做网站沈阳本地wordpress固定连接设置404
  • 遵义市网站建设公司mip网站
  • 建设网站哪些公司好泰州网站制作费用
  • 创建网站要找谁深圳软件外包公司列表
  • 基于php网站开发设计wordpress文章中加入代码段
  • xp系统建设网站杭州聚翔网络有限公司
  • 文登建设局网站免费行情软件网站下载
  • wordpress网站框架wordpress文章图片幻灯片
  • 西安专业做网站的公司263企业邮箱入口注册
  • 谷歌网站推广优化注册网站时审核是人工审核吗还是电脑审核
  • 基层档案网站建设开发区招聘信息
  • 赚钱软件排行seo页面优化的方法
  • 深圳网站设计优刻设计制作实践活动感悟
  • 设计免费素材网站届毕业设计代做网站
  • 双线网站选服务器网站开发后台php技术
  • 中国十大网站建设公司怎么制作移动端网站
  • 辽宁营商建设局网站wordpress汉字验证码
  • 医院网站管理办法58同城济南网站建设
  • 网站统计源码wordpress页面不留边
  • 深圳汇鑫科技网站建设分类达人的作用