【发布时间】:2023-01-20 22:18:53
【问题描述】:
为什么我们需要
hash[number] = index在下面的代码中?
nums = [11, 8, 1, 7] target = 9 def two_sum(nums, target) hash = {} nums.each_with_index do |number, index| if complement = hash[target - number] return [complement, index] end hash[number] = index end end迭代确实:
nums[0] 是 11: 目标 - 数字 = 2 hash[2] 不存在 --> 我们应该能够忘记这个数字,因为索引 0 处的数字 11 不能成为解决方案的一部分
nums[1] 是 8: 目标 - 数字 = 1 hash[1] 确实存在,我们使用它的索引 (hash[1] =2个) 以及当前索引 (hash[8] =1个). --> 这是我们的解决方案,将在
return [complement, index]我不断得到的答案为什么
hash[number] = index需要的是以下几行:“hash[number] = index 行将当前数字的索引分配给以当前数字为键的散列。这很重要,因为它允许函数将当前数字与以后的数字相匹配这些数字加起来就达到了目标。”
但是因为我们得到了结果
return [complement, index]我似乎没有必要添加这一行?
【问题讨论】:
-
(1) 描述该方法应该做什么会有所帮助(对我们,也可能对您)。 (2) 如果你不在
hash中放入任何东西,hash[target - number]怎么会给你任何东西? (3) 如果在nums中没有找到您要查找的内容,应该怎么办? -
这有很多问题,但最初我注意到:“哈希 [1] 确实存在”.不,当你到达
nums[1]时,它不会,nums[2]还没有实现,因此hash[1]不存在.然而,迭代 3 将返回[1,2],因为complement = hash[target - number]变为hash[9-1]并且hash[8]确实存在并返回1(它的索引)并且当前索引将为 2。如果没有hash[number] = index,这将不是真的,这方法将始终返回nums数组。 -
是的,更多细节会更好。谢谢你们的帮助——我设法理解了我的想法错在哪里——我错误地认为散列被填充了,但我们只在 else 语句中填充它。现在说得通了。谢谢你!