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

如何减少Ruby Hash中的查找次数?以查找数组首个重复元素为例

查找数组中第一个重复元素:优化Hash的两次查找问题

假设你要找出数组里的第一个重复元素,可以用下面的代码实现:

cnt = {};
[ 11, 22, 77, 22, 33 ].each_with_index { |x,i|
  j = cnt[x];          ## <1>
  break [x, j, i] if j
  cnt[x] = i           ## <2>
} #=> [ 22, 1, 3 ]

只要Ruby Hash的查找和插入操作是O(1),这段代码的时间复杂度就是O(n),但它会执行两次查找(标记<1>和<2>的位置)。

那有没有办法避免这第二次查找?

我试过这么写:

cnt = {}
some_array.each_with_index { |x,i|
  j = cnt.exchange( x, i );
  break [x, j, i] if j
}

还自己实现了exchange方法:

def exchange( k, val )
  old, self[k] = self[k], val
  return old
end

但本质上这只是把第二次查找藏起来了,并没有真正避免它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:03:14