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

leetcode 1656. 设计有序流 简单

有 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 。
    • 否则,返回一个空列表。

示例:

输入
["OrderedStream", "insert", "insert", "insert", "insert", "insert"]
[[5], [3, "ccccc"], [1, "aaaaa"], [2, "bbbbb"], [5, "eeeee"], [4, "ddddd"]]
输出
[null, [], ["aaaaa"], ["bbbbb", "ccccc"], [], ["ddddd", "eeeee"]]

解释
OrderedStream os= new OrderedStream(5);
os.insert(3, "ccccc"); // 插入 (3, "ccccc"),返回 []
os.insert(1, "aaaaa"); // 插入 (1, "aaaaa"),返回 ["aaaaa"]
os.insert(2, "bbbbb"); // 插入 (2, "bbbbb"),返回 ["bbbbb", "ccccc"]
os.insert(5, "eeeee"); // 插入 (5, "eeeee"),返回 []
os.insert(4, "ddddd"); // 插入 (4, "ddddd"),返回 ["ddddd", "eeeee"]

提示:

  • 1 <= n <= 1000
  • 1 <= id <= n
  • value.length == 5
  • value 仅由小写字母组成
  • 每次调用 insert 都会使用一个唯一的 id
  • 恰好调用 n 次 insert

分析:根据题目要求模拟即可。看动态图比看题目描述清楚一些。




typedef struct {
    char **s;
    int size;
    int ptr;
} OrderedStream;


OrderedStream* orderedStreamCreate(int n) {
    OrderedStream *p=(OrderedStream*)malloc(sizeof(OrderedStream));
    p->s=(char**)malloc(sizeof(char*)*(n+1));
    for(int i=1;i<=n;++i)
        p->s[i]=NULL;
    p->size=n+1;
    p->ptr=1;
    return p;
}

char** orderedStreamInsert(OrderedStream* obj, int idKey, char* value, int* retSize) {
    obj->s[idKey]=value;
    char **ans=(char**)malloc(sizeof(char*)*obj->size);
    int cnt=0;
    while(obj->ptr<obj->size&&obj->s[obj->ptr])
        ans[cnt++]=obj->s[obj->ptr],obj->ptr++;
    *retSize=cnt;
    return ans;
}

void orderedStreamFree(OrderedStream* obj) {
    free(obj->s);
    free(obj);
    return;
}

/**
 * Your OrderedStream struct will be instantiated and called as such:
 * OrderedStream* obj = orderedStreamCreate(n);
 * char** param_1 = orderedStreamInsert(obj, idKey, value, retSize);
 
 * orderedStreamFree(obj);
*/


http://www.kler.cn/a/561058.html

相关文章:

  • Nginx解决前端跨域问题
  • LD_PRELOAD 绕过 disable_function 学习
  • JavaWeb-在idea中配置Servlet项目
  • 为什么要将PDF转换为CSV?CSV是Excel吗?
  • HTML+JS+CSS 鼠标上下移动页面(非滚动条)
  • 异步联邦学习的动态隐私保护框架:重构边缘智能的数据安全边界
  • C#中开发OCR应用时,以下是一些推荐的开源库和工具
  • Android 老项目 jcenter 库失效
  • springBoot统一响应类型2.0版本
  • 力扣3102.最小化曼哈顿距离
  • vue 3D 翻页效果
  • 使用 金南瓜EAP库 进行 二次开发与半导体厂家进行通讯源码
  • 基于云的物联网系统用于实时有害藻华监测:通过MQTT和REST API无缝集成ThingsBoard
  • DeepSeek开源FlashMLA:颠覆大模型训练效率的新一代技术解析
  • 蓝桥杯第十六届嵌入式模拟编程题解析
  • 2 算法1-2 明明的随机数
  • redis---字符串SDS(简单动态字符串)底层结构
  • 【无人集群系列---无人机集群编队算法】
  • 免填邀请码工具:赋能六大核心场景,重构App增长新模型
  • 故障诊断 | DCS差异创意搜索算法优化CatBoost故障诊断(MatlabPython)