问题背景
有 n n n 个 ( i d , v a l u e ) (id, value) (id,value) 对,其中 i d id id 是 1 1 1 到 n n n 之间的一个整数, v a l u e value value 是一个字符串。不存在 i d id id 相同的两个 ( i d , v a l u e ) (id, value) (id,value) 对。
设计一个流,以 任意 顺序获取 n n n 个 ( i d , v a l u e ) (id, value) (id,value) 对,并在多次调用时 按 i d id id 递增的顺序 返回一些值。
实现 OrderedStream
类:
OrderedStream(int n)
构造一个能接收 n n n 个值的流,并将当前指针 p t r ptr ptr 设为 1 1 1。String[] insert(int id, String value)
向流中存储新的 ( i d , v a l u e ) (id, value) (id,value) 对。存储后:- 如果流存储有 i d = p t r id = ptr id=ptr 的 ( i d , v a l u e ) (id, value) (id,value) 对,则找出从 i d = p t r id = ptr id=ptr 开始的 最长 i d id id 连续递增序列 ,并 按顺序 返回与这些 i d id id 关联的值的列表。然后,将 p t r ptr ptr 更新为最后那个 i d + 1 id + 1 id+1。
- 否则,返回一个空列表。
数据约束
- 1 ≤ n ≤ 1000 1 \le n \le 1000 1≤n≤1000
- 1 ≤ i d ≤ n 1 \le id \le n 1≤id≤n
- v a l u e . l e n g t h = 5 value.length = 5 value.length=5
- v a l u e value value 仅由小写字母组成
- 每次调用 i n s e r t insert insert 都会使用一个唯一的 i d id id
- 恰好调用 n n n 次 i n s e r t insert insert
解题过程
阅读理解题,简单来说就是按索引存储之后,一直输出到存储的内容为空的位置再停下。
具体实现
class OrderedStream {private int ptr = 1;String[] stream;public OrderedStream(int n) {stream = new String[n + 2];}public List<String> insert(int idKey, String value) {List<String> res = new ArrayList<>();stream[idKey] = value;while (stream[ptr] != null) {res.add(stream[ptr]);ptr++;}return res;}
}/*** Your OrderedStream object will be instantiated and called as such:* OrderedStream obj = new OrderedStream(n);* List<String> param_1 = obj.insert(idKey,value);*/