第二步:按选型实现

照着上一步的选型写出来:集合判重、数组保序。把去重后的三个词拼起来输出(用 / 隔开)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第三步:出一份对比数据

补全 report:格式是「数组版次数/集合版次数/倍数」。算 200 条的情况——没有这三个数,「我的方案更好」就只是一句口号。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第四步:优化后行为不能变

补全 dedup(快版),再和 slow_dedup(慢版)各跑一遍,比较结果是否完全相同。相同输出 结果一致,否则输出 结果不一致。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

交付:选型实现测量优化

这是这条路线、也是整个数据结构领域的最终作品。选型表、慢版、benchmark 计数都已经写好,补全三个关键函数(dedup 快版、report、distinct),然后一次验完五条:choose 给出「集合加数组」且表外需求给出「还得再想

开始练习 →

std::list 边遍历边删

在 std::list 里一边遍历一边 erase,正确的写法是【0】。

开始练习 →

补写判重保序

场景:实验机上 ~/work/ds/dedup.cpp 读入一串单词,要去掉重复的并按第一次出现的顺序输出,可 add 还没写。 任务:补全 add:用 unordered_set 判重、vector 保序。make 编译(带内存检查),.

开始练习 →

十万次查询两秒内查完

场景:~/work/ds/lookup.cpp 读入 n 个已登记编号和 q 个待查编号,输出查到了几个。结果对,可 n、q 都是 10 万时要跑很久。 任务:改写 lookup.cpp,让 10 万个编号、10 万次查询在 2 秒内算完。

开始练习 →

实现词频计数器

场景:~/work/ds/counter.cpp 按指令操作一个词频计数器 WordCounter:add 记一次、count 查次数、top 查最多的词。三个函数都还没写。 任务:补全 add、count、top:top 在次数并列时要输

开始练习 →

修好删完还在用迭代器

场景:~/work/ds/iter.cpp 在 std::list 里边遍历边删掉 k 的倍数。输出时好时坏,带着内存检查一跑,报 heap-use-after-free。 任务:修好删除那个循环。make 编译后用 sample.txt

开始练习 →

修好扩容漏还的内存

场景:~/work/ds/buf.cpp 用手写的可扩容缓冲区 IntBuf 存一串整数,输出「个数 总和」。输出是对的,可一运行就报内存泄漏。 任务:修好 IntBuf::grow。make 编译后用 sample.txt 自测,运行时不

开始练习 →