@Jestome

Как выбрать минимальное значение из количества одинаковых элементов массива?

Что-то вроде задача не сложная, а сижу уже 2-ой день...
Суть проста и вполне подробно описывается в заголовке)) :
Нужно найти количество повторений каждого из элементов в целочисленном массиве и вывести самое минимальное количество. То есть при:
a = [6, 2, 4, 4, 2, 2, 6, 4]
# Программа должна вывести 6
  • Вопрос задан
  • 996 просмотров
Пригласить эксперта
Ответы на вопрос 3
@kttotto
пофиг на чем писать
Я не по части питона, но вот, ловите
a = [1, 2, 4, 4, 2, 2, 1, 4]
length = len(a)

i = 0
max = a[i]

while (i < length):
	if(a[i] > max):
		max = a[i]
	i += 1

counter = 0
i = 0
result = length

while (i < length):
	if(max == a[i]):
		counter = counter + 1
		if(i == (length - 1) or a[i+1] != max):
			if(counter < result):
				result = counter
				counter = 0
	i += 1

print(result)
input()
Ответ написан
Комментировать
@AlexSku
не буду отвечать из-за модератора
Если я правильно понял, вам нужна группировка. Вот моё решение на Haskell (я новичок, так что не исключено, что есть лучшие варианты). По крайней мере (комментарии) алгоритм ясен.
import Data.List

a = [1, 2, 4, 4, 2, 2, 1, 4]

-- группируем
b = group a                                    -- [[1],[2],[4,4],[2,2],[1],[4]]

-- фильтруем список b, содержащие максимум списка a
c = let f (x:_) = x == maximum a in filter f b -- [[4,4],[4]]

-- минимальная длина группы
minimum . map length $ c                       -- 1


Вот цепочка в одну строку:
minimum . map length . filter ((== maximum a) . head ) . group $ a
Ответ написан
Комментировать
honor8
@honor8
Принципы быстродействия VBA в описании
Однострочник на ruby: подсчёт повторений (количества экземпляров) с выводом минимального значения одинаково что в массиве, что в строке:
a.inject(Hash.new(0)) { |hash, id| hash[id] += 1; hash }.invert.min.last

Если минимальных значений несколько:
h = a.inject(Hash.new(0)) { |hash, id| hash[id] += 1; hash }
Hash[h.select { |key, val| val == h.values.min }].keys
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы