module Answers::Issue20260302
Original answer
Public Instance Methods
Source
# File answers/20260302.rb, line 15 def boyer_and_moore_majority_element_each(array) majority_element = array.first counter = 0 array.each do |element| if counter.zero? majority_element = element counter = 1 elsif majority_element == element counter += 1 else counter -= 1 end end majority_element end
Boyer-Moore Voting algorithm solution.
Source
# File answers/20260302.rb, line 8 def izkreny_majority_element_tally_max_by_oneliner(array) array.tally.max_by { |_key, value| value }.first end
Ruby Users Forum answers
Public Instance Methods
Source
# File answers/20260302.rb, line 77 def eayurt_majority_element_each(array) candidate, count = array[0], 0 array.each do |element| count == 0 ? candidate = element : nil count += element == candidate ? 1 : -1 end candidate end
Source
# File answers/20260302.rb, line 41 def fpsvogel_majority_element_reduce_chained(numbers) numbers .reduce([nil, 0]) { |(candidate, count), el| candidate = el if count.zero? [candidate, count + ((el == candidate) ? 1 : -1)] } .first end
Boyer-Moore voting algorithm.
Source
# File answers/20260302.rb, line 50 def josh_dev_majority_element_reduce(numbers) candidate = numbers.first numbers.reduce(0) do |vote_total, number| candidate = number if vote_total.zero? vote_total + (number == candidate ? 1 : -1) end candidate end
Source
# File answers/20260302.rb, line 73 def josh_dev_majority_element_sort_midpoint_oneliner(numbers) numbers.sort[numbers.size / 2] end
Original code layout:
def majority_element(numbers) midpoint = numbers.size / 2 # because of the 'appears more than n/2 times' aspect, # the answer will equal the median of all the numbers numbers.sort[midpoint] end