가있는 경우, 배열의 대부분의 발생과 항목을 찾을 수 :루비 : 내가 배열에서 항목 대부분의 항목을 찾을 수 있습니다이 코드
letters.max_by { |i| letters.count(i) }
그러나이
a = [1, 2, 2, 3, 3]
에 대한 2
를 반환합니다 3
에도 같은 결과가 나타납니다. 이 실제로 인 항목이있는 경우 어떻게 알 수 있습니까? 하나의 챔피언이 없다면 false
을 얻고 싶습니다.
가있는 경우, 배열의 대부분의 발생과 항목을 찾을 수 :루비 : 내가 배열에서 항목 대부분의 항목을 찾을 수 있습니다이 코드
letters.max_by { |i| letters.count(i) }
그러나이
a = [1, 2, 2, 3, 3]
에 대한 2
를 반환합니다 3
에도 같은 결과가 나타납니다. 이 실제로 인 항목이있는 경우 어떻게 알 수 있습니까? 하나의 챔피언이 없다면 false
을 얻고 싶습니다.
난 당신이 성능에 대해 걱정하지 않는 경우에 당신이 할 수있는 것 같아요 :
def max_occurrences(arr) arr.sort.max_by{|v| arr.count(v)} != arr.sort.reverse.max_by{|v| arr.count(v)} ? false : arr.max_by{|v| arr.count(v)} end
나는 그것의 작은 도구를 신경 쓰지 않는다. 그래서 나를 위해 일한다. – Asara
이 꽤 추한 및 개선의 필요성에 있지만 :
def champion(array)
grouped = array.group_by(&:itself).values.group_by(&:length)
best = grouped[grouped.keys.max]
if (best.length == 1)
best[0][0]
else
false
end
end
나는 이것에 대한 쉬운 단발 솔루션 O (N^2가 아니라 하나가 적어도, 거기 확실하지 않다) 또는 그 이상입니다. 이는 특이합니다.
나는 이런 식으로 뭔가 할 것 :
def max_occurrences(arr)
counts = Hash.new { |h, k| h[k] = 0 }
grouped_by_count = Hash.new { |h, k| h[k] = [] }
arr.each { |el| counts[el] += 1 } # O(n)
counts.each { |el, count| grouped_by_count[count] << el } # O(n)
max = grouped_by_count.sort { |x, y| y[0] <=> x[0] }.first[1] # O(n log n)
max.length == 1 ? max[0] : false
end
그것은 더 아주 세련 한 줄 없다, 그러나 그것은 (N 로그 n) O 이내에 읽을 수 있어요 및 실행됩니다.
a = [1, 2, 2, 3, 3]
occurrences = a.inject(Hash.new(0)){ |h, el| h[el] += 1; h } # => {1=>1, 2=>2, 3=>2}
max_occurences = occurrences.max_by{ |_, v| v } # => [2, 2]
max_occurences.count > 1 ? false : occurrences.key(max_occurences.first)
는 "정말"당신은 아마 마음이 무엇인지에 대한 올바른 단어가 아닙니다. – sawa
[Ruby : 가장 많이 출현 한 배열의 항목을 찾는 방법] (https://stackoverflow.com/questions/412169/ruby-how-to-find-item-in-array-which-has) 가장 많이 발생하는 것) – Technophobe01