CS144-1

AI-摘要
Tianli GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
CS144-1
幻雪CS144-1
前言cmake --build build --target check 0
来检查你的lab0后就可以开始这部分的实验了
事实上对于这部分实验,在我整个实验中花费的时间是最长的,代码也是最长的,而且即使通过了,后续的实验中,也会由于这部分导致超时,而无法通过。所以参考了其他大佬的思路才通过了这部分的测试
这是我参考的大佬的链接,需要代码的可以去他那边看看https://github.com/Mobuiss
目前大多数对于这一题的思路就是重复子串的合并,我一开始想到的也是用map来实现这个过程,但是后面写得也很长,性能很低。大佬的思路就不一样了,是用一个vector来维护buffer,下面详细讲。
实验开始
这个实验的主体是通过insert这个函数实现的
它的传参有
uint64_t first_index
string data
bool is_last_substring
Writer& output
first_index是每一个data绝对位置,也就是类似于leetcode中合并区间的区间下标。data就是数据本身,可以调用.size来获取长度,is_last_substring就是问是否是最后一个数据段,output是一个输出接口,调用output.push()就可以把完整的数据段输出。
实现过程:
先是看是否是最后一段数据,如果是就设置保存一下,后面可以用来作为结束的依据。
然后就是判断是否是过于新或者过于旧的片段我们就不要
然后回放到map中(图中有可能结果有多个不相邻的判断,不一定是只有一个),下次放入判断前重新检查一下是否有新的片段成为了需要的下标,就推送到output里
由于笔者写的这部分代码确实不太好,所以如果想参考的话可以去我上面推荐的作者或者其他博客看看。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果