【发布时间】:2016-10-24 17:16:46
【问题描述】:
对于短数组,以下函数运行良好。它应该返回总和等于给定整数的第一个数组对。但是,如果数组的长度超过 1000 万个元素,则请求会超时,因为(我认为)我在第一行创建的变量中存储了数千个值。我知道我必须使用 memoization (||=) 但不知道如何使用它。
array1 = [1,2,3,4,5,6,7]
number = 3
array2 = [1,2,3.....n] # millions of elements
combos = array1.combination(2).to_a
(combos.select { |x,y| x + y == number }).sort.first
我需要收集所有可能的对来对它们进行排序,我使用 select 来遍历整个列表,而不是停留在返回 true 的第一对。
【问题讨论】:
-
什么是
INTEGER?ARRAY是什么?你在那儿做什么?为什么不用find而不是select+first? -
我修改了代码。我没有使用检测或查找,因为一旦找到第一个 true,它们就会停止迭代。
-
但无论如何你都想找到第一次出现。如果只是首先需要的话,找到所有有什么意义?
-
因为我实际上需要以最低值开头的那对。
-
如果你“知道你必须使用 memoization”,但不知道如何使用它......这意味着你不知道它的作用;你怎么知道你必须使用它?
标签: arrays ruby memoization