arr是字符串数组:
arr
["hello", "world", "stack", "overflow", "hello", "again"]
什么是检查是否arr有重复项的简单而优雅的方法,如果有,返回其中一个(不管是哪个)?
例子:
["A", "B", "C", "B", "A"] # => "A" or "B" ["A", "B", "C"] # => nil
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