You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby数组two_sum方法错误排查:重复索引[1,1]问题

排查Ruby Array#two_sum方法的索引重复问题

让我看看你的two_sum方法问题出在哪~

问题根源分析

你代码里的核心问题出在内层循环的判断逻辑上:

  • 你用each_index遍历comp_idx,然后取self[comp_idx + 1]进行求和判断,但你的排除条件unless comp_idx + 1 == self.length || idx == comp_idx只拦住了idx和comp_idx相等的情况,完全没排除idx和comp_idx + 1相等的情况!
  • 举个例子:当idx=1(对应元素0)、comp_idx=0时,comp_idx+1=1,这时候两个索引都是1,也就是同一个元素0+0=0,自然就把无效的[1,1]加入了结果数组。
  • 另外,你的循环方式还会导致重复检查同一对索引(比如既检查[0,4]又检查[4,0]),虽然最后排序后可能看起来没问题,但会额外增加不必要的计算。

修正后的代码

我们可以通过只遍历i < j的索引对来彻底解决这些问题——这样既保证两个索引绝对不同,又不会重复检查同一组元素对:

class Array
  def two_sum
    final_arr = []
    # 外层遍历每个元素及其索引i
    each_with_index do |num1, i|
      # 内层只遍历i之后的索引j,确保i < j
      (i+1...length).each do |j|
        num2 = self[j]
        final_arr << [i, j] if num1 + num2 == 0
      end
    end
    # 按要求对结果排序
    final_arr.sort
  end
end

代码解释

  1. 避免重复与无效索引:内层循环从i+1开始,确保j永远大于i,既不会出现i == j的情况,也不会重复检查[j,i]这种反向对。
  2. 逻辑简洁清晰:直接判断两个不同索引的元素和是否为0,符合two_sum的核心需求。
  3. 测试验证:调用[-1, 0, 2, -2, 1].two_sum会返回预期的[[0, 4], [2, 3]]。

内容的提问来源于stack exchange,提问作者Monique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:55:45