Skip to content

Instantly share code, notes, and snippets.

@semmin
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save semmin/630f7115b35ca0488dc7 to your computer and use it in GitHub Desktop.
Save semmin/630f7115b35ca0488dc7 to your computer and use it in GitHub Desktop.
Задача про непарные числа в массиве
a = [4,1,1,2,2,3,3,3,2,2,5,5,5,5]
el = a.pop
while el do # O(N)
# в массиве осталось нечетное число чисел равных el
if a.find_all {|m| m == el}.size % 2 != 0 # O(N2)
a.delete_if {|m| m == el} # O(N3) значит вместе с el их было четное число, значит это не то что мы ищем
else # если осталось четное число или 0, то изначально было нечетное, это то что мы ищем
puts "Непарный элемент: #{el}"
break
end
el = a.pop
end
# => Непарный элемент: 3
# Альтернатива с O(N), также найдет все непарные числa, а не только первое
a = [4,1,1,2,2,3,3,3,2,2,5,5,5,5]
occ={} # hash для хранения occurances of n
a.each do |el| # О(N)
occ[el]= occ[el].nil? ? 1 : occ[el] + 1
end
non_paired_kv = occ.select {|k,v| v % 2 != 0}
puts "Не парный элемент(ы): #{non_paired_kv.keys}"
# => Не парный элемент(ы): [4, 3]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment