既然比赛已经结束了,我想问一下这个问题。在过去的三天里,我一直在为这个问题苦苦挣扎,因为实际上我无法理解它。
问题来了: 找到 2013 年 Facebook 黑客杯的最低人数
这是我为这个问题找到解决方案的网站: 解决方案
我无法理解的是以下部分:
尽管这些前 K 值可以是任何值,但我们可以对初始 K 元素之后的数组内容进行一些有用的观察:
- 根据鸽巢原理,每个元素都在 0 和 K(含)之间。
- 因此,K + 1 个连续元素的每个窗口将包含 0 到 K 之间的每个值恰好一次(即它包含整数 0 到 K 的排列)。
- 因此,对于 i > 2K:M[i] = M[i - (K + 1)]。
虽然如果第一点是真的,我能够理解第二点和第三点。第一个真的让我很困扰。为什么元素必须在 0 和 K 之间,为什么它们不能都是初始 K 元素中不存在的最小非负整数。
例如:对于以下测试用例:
1
46 18
7 11 9 46
前 K 个元素是:
[7、40、35、26、19、34、15、36、37、2、31、28、41、0、9、16、1、20]
现在为什么其余元素必须在 0 到 18 之间,而我之前的 K 个元素中有超过 18 个的元素。