小编典典

如何在数组中查找并返回重复值

all

arr是字符串数组:

["hello", "world", "stack", "overflow", "hello", "again"]

什么是检查是否arr有重复项的简单而优雅的方法,如果有,返回其中一个(不管是哪个)?

例子:

["A", "B", "C", "B", "A"]    # => "A" or "B"
["A", "B", "C"]              # => nil

阅读 59

收藏
2022-07-16

共1个答案

小编典典

a = ["A", "B", "C", "B", "A"]
a.detect{ |e| a.count(e) > 1 }

我知道这不是很优雅的答案,但我喜欢它。这是美丽的一个班轮代码。除非您需要处理庞大的数据集,否则工作得很好。

寻找更快的解决方案?干得好!

def find_one_using_hash_map(array)
  map = {}
  dup = nil
  array.each do |v|
    map[v] = (map[v] || 0 ) + 1

    if map[v] > 1
      dup = v
      break
    end
  end

  return dup
end

它是线性的,O(n),但现在需要管理多行代码,需要测试用例等。

如果您需要更快的解决方案,可以尝试使用 C。

这是比较不同解决方案的要点:https ://gist.github.com/naveed-
ahmad/8f0b926ffccf5fbd206a1cc58ce9743e

2022-07-16