LeetCode·每日一题·1656.设计有序流·模拟
2023-09-27 14:26:29 时间
链接:https://leetcode.cn/problems/design-an-ordered-stream/solution/jian-dan-mo-ni-by-xun-ge-v-d8sm/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目![](https://img-blog.csdnimg.cn/f291ae00bcde4d95b514ace0620e9f76.png)
示例![](https://img-blog.csdnimg.cn/63cbf79557c4489498d0a820eaaaeb8d.png)
思路
解题思路
题意需要设计一个流,以 任意 顺序获取 n 个 (id, value) 对,并在多次调用时 按 id 递增的顺序 返回一些值。
根据题目意思直接模拟即可。
- 当 id == ptr,枚举一下从ptr下标开始,之后是否存在字符串,存在就一起输出即可
对于字符串可以用指针索引,不需要申请额外空间保存
代码
typedef struct {//结构体数组保存
int ptr;//ptr下标
char ** str;//保存下标对应字符串
int * ans;//记录那些位置被用了
int n;//总大小
} OrderedStream;
OrderedStream* orderedStreamCreate(int n) {//初始化变量,对于字符串可以用指针索引,不需要申请额外空间保存
OrderedStream * obj = (OrderedStream *)malloc(sizeof(OrderedStream));
obj->ptr = 1;
obj->n = n+1;
obj->str = (char **)malloc(sizeof(char *) * (n+1));
obj->ans = (int *)malloc(sizeof(int) * (n+1));
memset(obj->ans, 0, sizeof(int) * (n+1));
return obj;
}
char ** orderedStreamInsert(OrderedStream* obj, int idKey, char * value, int* retSize) {
*retSize = 0;
obj->str[idKey] = value;
obj->ans[idKey] = idKey;//先入队
if(obj->ptr == idKey)//枚举后面是否存在,一起输出
{
char ** res = (char **)malloc(sizeof(char *) * obj->n);
for(obj->ptr; obj->ptr < obj->n; obj->ptr++)
{
if(obj->ans[obj->ptr] != 0)
{
res[(*retSize)++] = obj->str[obj->ptr];
}
else
break;
}
return res;
}
return NULL;
}
void orderedStreamFree(OrderedStream* obj) {
free(obj->ans);
free(obj->str);
free(obj);
}
/**
* Your OrderedStream struct will be instantiated and called as such:
* OrderedStream* obj = orderedStreamCreate(n);
* char ** param_1 = orderedStreamInsert(obj, idKey, value, retSize);
* orderedStreamFree(obj);
*/
作者:xun-ge-v
链接:https://leetcode.cn/problems/design-an-ordered-stream/solution/jian-dan-mo-ni-by-xun-ge-v-d8sm/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- 【LeetCode】二叉树的序列化与反序列化 [H](二叉树)
- 【LeetCode】最小栈 [M](栈)
- LeetCode_动态规划_中等_1653.使字符串平衡的最少删除次数
- LeetCode_位运算_简单_405.数字转换为十六进制数
- LeetCode_进制转换_简单_171.Excel 表列序号
- LeetCode_并查集_中等_399.除法求值
- LeetCode_模拟_中等_621.任务调度器
- LeetCode·每日一题·1019. 链表中的下一个更大节点·单调栈
- LeetCode·每日一题·2042.检查句子中的数字是否递增·模拟
- LeetCode·1971.寻找图中是否存在路径·并查集
- LeetCode·每日一题·1668.最大重复子字符串·模拟
- LeetCode·每日一题·1620.网络信号最好的坐标·模拟
- LeetCode·每日一题·1790.仅执行一次字符串交换能否使两个字符串相等·模拟
- LeetCode·每日一题·856.括号的分数·栈模拟
- LeetCode·1035.不相交的线·动态规划
- LeetCode·每日一题·1652.拆炸弹·模拟
- LeetCode·每日一题·946.验证栈序列·栈模拟
- LeetCode·每日一题·1598.文件夹操作日志收集器·栈模拟
- [LeetCode] 285. Inorder Successor in BST
- leetcode 234: Palindrome Linked List
- leetcode - Min Stack
- [LeetCode] 636. Exclusive Time of Functions 函数的独家时间
- [LeetCode] 280. Wiggle Sort 摆动排序
- [LeetCode] 366. Find Leaves of Binary Tree 找二叉树的叶节点
- leetcode 169 多数元素