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

LeetCode(Array)1656. Design an Ordered Stream

1. 问题

There is a stream of n (idKey, value) pairs arriving in an arbitrary order, where idKey is an integer between 1 and n and value is a string. No two pairs have the same id.

Design a stream that returns the values in increasing order of their IDs by returning a chunk (list) of values after each insertion. The concatenation of all the chunks should result in a list of the sorted values.

Implement the OrderedStream class:

OrderedStream(int n) Constructs the stream to take n values.
String[] insert(int idKey, String value) Inserts the pair (idKey, value) into the stream, then returns the largest possible chunk of currently inserted values that appear next in the order.

Example:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Input

[“OrderedStream”, “insert”, “insert”, “insert”, “insert”, “insert”]
[[5], [3, “ccccc”], [1, “aaaaa”], [2, “bbbbb”], [5, “eeeee”], [4, “ddddd”]]
Output
[null, [], [“aaaaa”], [“bbbbb”, “ccccc”], [], [“ddddd”, “eeeee”]]

Explanation

// Note that the values ordered by ID is [“aaaaa”, “bbbbb”, “ccccc”, “ddddd”, “eeeee”].
OrderedStream os = new OrderedStream(5);
os.insert(3, “ccccc”); // Inserts (3, “ccccc”), returns [].
os.insert(1, “aaaaa”); // Inserts (1, “aaaaa”), returns [“aaaaa”].
os.insert(2, “bbbbb”); // Inserts (2, “bbbbb”), returns [“bbbbb”, “ccccc”].
os.insert(5, “eeeee”); // Inserts (5, “eeeee”), returns [].
os.insert(4, “ddddd”); // Inserts (4, “ddddd”), returns [“ddddd”, “eeeee”].
// Concatentating all the chunks returned:
// [] + [“aaaaa”] + [“bbbbb”, “ccccc”] + [] + [“ddddd”, “eeeee”] = [“aaaaa”, “bbbbb”, “ccccc”, “ddddd”, “eeeee”]
// The resulting order is the same as the order above.

Constraints:

  • 1 <= n <= 1000
  • 1 <= id <= n
  • value.length == 5
  • value consists only of lowercase letters.
  • Each call to insert will have a unique id.
  • Exactly n calls will be made to insert.

2. 解题思路

方法

1.定义空的string数组为res,指针为ptr
2.指针起始位置为0,res的数组长度等于n
3. 新建一个list
4. res的长度为idKey-1,字符串数据插入到第 K 个位置(idKey 减 1)
5.如果位置已满,指针一直向右移动,在list添加res索引位置添加相应的值
6…返回list

3. 代码

代码:

class OrderedStream {
    int ptr;//指针起始位置
    String[] res;//1.定义空的string数组为res,指针为ptr
    
    public OrderedStream(int n) {
        ptr = 0;//2.指针起始位置为0,res的数组长度等于n
        res = new String[n];
    }
    
    public List<String> insert(int idKey, String value) {
        List<String> list = new ArrayList<>();//3. 新建一个list
        
        res[idKey - 1] = value; //4. res的长度为idKey-1,字符串数据插入到第 K 个位置(idKey 减 1)
        while (ptr < res.length && res[ptr] != null) {//5.如果位置已满,请尝试将指针一直向右移动,在list添加res索引位置对应的值
            list.add(res[ptr]);
            ptr++;
        }
        return list;//6.返回list
    }
}

/**
 * Your OrderedStream object will be instantiated and called as such:
 * OrderedStream obj = new OrderedStream(n);
 * List<String> param_1 = obj.insert(idKey,value);
 */

相关文章:

  • 抖音小程序变现教程/杭州seo网站推广
  • 合肥网站推广/中国软文网
  • 做网站前景/好看的网站模板
  • 做网站和视频剪辑用曲面屏/下载百度安装到桌面
  • wordpress theauthor/可以直接打开网站的网页
  • 甘肃省建设部网站首页/短视频赚钱app软件
  • 秒懂 Java 守护线程 ( Daemon Thread )
  • Redis - Redis 6.0 新特性之多线程模型
  • MySQL InnoDB的MVCC实现机制
  • 2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子
  • js如何实现随机数切换
  • Week 11
  • 《Linux Shell脚本攻略》学习笔记-第十二章
  • CODESYS开发教程8-定时、触发和计数
  • 26--Django-后端开发-drf之路由、认证与权限用法
  • 【云原生】k8s之HPA,命名空间资源限制
  • 【代码随想录】96.不同的二叉搜索树
  • 书单这么多,这份最硬核