为什么按结束时间而不是开始时间?
C++ 入门 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
想想还有哪些题"排完序就好办了"。
[1,3] 和 [2,5] 能合并吗?合并成什么?
求 n 的阶乘,边界是什么?
画出求 4 的阶乘的调用过程。
怎么避免重复计算?
记忆化需要额外准备什么?
用递推求斐波那契第 30 项。
3 个盘要移几次?
分治的三个步骤是什么?
参考答案(家长):分糖果、合并区间、田忌赛马都是。
参考答案(家长):早结束才能给后面腾出更多时间。
参考答案(家长):n 为 0 或 1 时直接返回 1。
参考答案(家长):能,合成 [1,5]。
参考答案(家长):把算过的存起来,或者改成从小往大推。
参考答案(家长):4×(3×(2×(1))),从里往外算回去。
参考答案(家长):两个变量滚动相加,30 次循环即可。
参考答案(家长):一个数组记"算没算过、结果是多少"。
参考答案(家长):分、治、合。
参考答案(家长):7 次,规律是 2 的 n 次方减 1。
合并两个各 3 个元素的有序数组,要比几次?
一千个元素,归并排序大约做多少次比较?
快排和归并的主要区别是什么?
什么样的数据会让快排最慢?
二分查找套在循环里,是什么复杂度?
n 是十万,你会考虑什么复杂度的算法?
能开一千乘一千的二维整数数组吗?
什么情况下值得这样换?
举一个你用过的"空间换时间"。
n 是十万你写了两层循环,会怎样?
参考答案(家长):约一万次(1000 乘 10)。
参考答案(家长):最多 5 次,每次确定一个位置。
参考答案(家长):已经有序且总选第一个当基准的时候。
参考答案(家长):快排在"分"的时候做工作,归并在"合"的时候做工作。
参考答案(家长):n log n 或线性。
参考答案(家长):n 乘 log n。
参考答案(家长):内存吃紧而查询次数不多的时候。
参考答案(家长):能,一百万个数约 4MB,很安全。
参考答案(家长):一百亿次,必然超时。
参考答案(家长):前缀和、记忆化、桶统计都算。
动手写完整。
1 2 5 3 4 6 8 的答案是多少?
这题要用到哪几样学过的东西?
[1,3] [2,6] [8,10] 合并后是什么?
为什么比从头数一遍快?
翻出最近一次错误,写下当时的错误想法。
整理三个你最常用的代码片段。
挑一道题用第二种方法重做。
给同学讲一道你最近做的题。
给自己列一张"我已经掌握的算法"清单。
参考答案(家长):4(3 4 6 8)。
参考答案(家长):读入、求和求最值、计数、排序,四段拼起来。
参考答案(家长):[1,6] 和 [8,10]。
参考答案(家长):字符处理、计数数组、排序。
参考答案(家长):记录思维错误,比记录代码错误有用。
参考答案(家长):两次二分各 log n,比线性快得多。
参考答案(家长):能说出两种方法各自的适用场景,才算真懂。
参考答案(家长):亲手整理过的,才记得住。
参考答案(家长):写得出来的才是真会的。
参考答案(家长):讲的过程会暴露你自己都没意识到的模糊处。