问题描述
我们都喜欢Twix(因为它是最好的糖果),但这是孩子们的第一个万圣节---我们必须为他们抓住每种糖果中的至少一种。每个万圣节,Numberline大街上的所有居民都会发送一封电子邮件,说明他们今年将赠送的糖果类型。
哦! 我们生活在一维世界中。
在某些方面(而不是其他方面)非常懒惰,我们绘制了房屋的地图,并给出了他们在街上的位置。我们还注意到了他们所拥有的糖果类型。这是我们今年制作的地图:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
为了孩子们的小腿,我们需要找到从附近任何房子开始的最短步行路程,以至少收集每种糖果中的一种。
例子
在几个用户(包括Shaggy)的请求下,我将介绍一些可行的示例。希望这可以清除一切。:) 输入:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
输出:
[1, 2, 3]
另一个地图和解决方案...
输入:
[(-3, {"KitKats", "Twix"}),
(-1, {"Hundred Grands"}),
(3, {"Kisses"}),
(12, {"Hundred Grands", "Twix", "KitKats"})]
输出:
[0, 1, 2]
我们可以从坐标9的房屋收集糖果开始,到坐标6和1的房屋。这可以通过步行8个单位来填补糖果配额,但这是最短的解决方案吗?
规则
条目必须在示例中采用结构相似的单个参数,并以最短的解决方案输出要访问的房屋的索引。
高尔夫球规则适用典型代码:以字节为单位的最短正确解决方案将获胜!
PS:这是世界上最大的科技公司之一给我的面试问题。如果您不喜欢高尔夫,请尝试找到O(k * n)时间解,其中k是糖果类型的数量,n是房屋数量。
编辑
正如乔纳森·艾伦(Jonathon Allan)所指出的,在这种情况下,“指示”的含义存在一些混淆。我们要输出自变量列表中的房屋位置,而不是车道上的坐标。