有人问我:
用剩余元素的总和替换列表中的每个数字,列表未排序。
所以假设如果我们有一个像 的数字列表{2, 7, 1, 3, 8}
,现在我们要用其余元素的总和替换每个元素。输出应该是:
{(7 + 1 + 3 + 8), (2 + 1 + 3 + 8), (2 + 7 + 3 + 8), (2 + 7 + 1 + 8), (2 + 7 + 1 + 3)}
== {19, 14, 20, 18, 13}
我回答了一个明显的解决方案:
首先评估sum
所有数字,然后从 中减去每个元素sum
。所以对于上面的列表sum
是2 + 7 + 1 + 3 + 8
= 21
,然后对于输出做喜欢:
{sum - 2, sum - 7, sum - 1, sum - 3, sum - 8}
{21 - 2, 21 - 7, 21 - 1, 21 - 3, 21 - 8}
== {19, 14, 20, 18, 13}
它只需要两次迭代列表。
然后面试官问我:现在不做减法吗?我无法回答:(
其他解决方案可能吗?有人可以分享任何其他技巧吗?有可能有更好的技巧吗?
让我们可以使用额外的内存空间(我试了几分钟后问,即使那样我也无法回答)。