Есть код, который создаёт список по формуле, затем двоичным поиском находит индекс введённого числа. Как сделать так чтобы помимо индекса искомого числа, искались его повторения и в итоге выводилось кол-во повторений
n=int(input())
a=[]
x=2
for i in range(0,n):
a.append(int(x))
x+=4
print(a)
low=0
high=len(a)-1
number=int(input())
while low <= high:
mid = (low+high) // 2
if number < a[mid]:
high=mid-1
elif number > a[mid]:
low=mid+1
else:
print("индекс=", mid)
break
else:
print("нет числа")
Python
Проверка повторения числа в массиве
array.count(5) - вернет количество вхождений пятерки в список. можно прогнать бинарным поиском на наличие определенного числа и если оно есть, с помощью данного метода узнать количество его вхождений в список.
сделать это именно бинарным поиском имхо анриал, т. к. если список будет:
[1,2,3,4,5,5,5,7,8,9,10], то мы, взяв середину не сможем точно определить, в какую сторону нам сдвигать поиск (а в данном случае куда бы не сдвинули - получим некорректный результат, т. к. одну из цифр 5 мы физически не увидим, благодаря особенностям алгоритма)
если кто-то меня поправит - буду рад.
сделать это именно бинарным поиском имхо анриал, т. к. если список будет:
[1,2,3,4,5,5,5,7,8,9,10], то мы, взяв середину не сможем точно определить, в какую сторону нам сдвигать поиск (а в данном случае куда бы не сдвинули - получим некорректный результат, т. к. одну из цифр 5 мы физически не увидим, благодаря особенностям алгоритма)
если кто-то меня поправит - буду рад.
Мне лень писать весь код с 0 поэтому я покажу как это будет выглядеть, если использовать встроенный модуль bisect
from bisect import bisect_left, bisect_right
l = [1,2,2, 3,3, 4, 4, 4, 4, 4, 5, 5, 5]
result = bisect_right(l, 4) - bisect_left(l, 4)
print(result)
Я думаю задумка тебе должна быть ясна т. е. твоя задача написать код, который просто будет правильно вычислять левую и правую границы в таком случае разница между этими и границами и будет являться числом повторнений
from bisect import bisect_left, bisect_right
l = [1,2,2, 3,3, 4, 4, 4, 4, 4, 5, 5, 5]
result = bisect_right(l, 4) - bisect_left(l, 4)
print(result)
Я думаю задумка тебе должна быть ясна т. е. твоя задача написать код, который просто будет правильно вычислять левую и правую границы в таком случае разница между этими и границами и будет являться числом повторнений
Если у Вас список представляет собой арифметическую прогрессию (согласно формуле создающей его), повторения каких чисел Вы ожидаете в нем найти?
По-моему, чтобы вывести количество повторений, достаточно дописать рядом с выводом индекса
print("Количество повторений равно единице.")
По-моему, чтобы вывести количество повторений, достаточно дописать рядом с выводом индекса
print("Количество повторений равно единице.")
Похожие вопросы
- Задача для Python. Работа с массивом чисел в файле.
- Python Имеется неупорядоченный массив из n различных целых чисел от 0 до n (0,1,…,j-1,j+1,….,n).
- Массив состоит из нескольких строк и нужно из каждой строки вывести наибольшее число
- 4 задачи по темам:Массивы,Строки,Циклы,условный оператор
- Помогите с информатикой Задание сделать через ввод массива и for i in range() Python
- Массивы на питоне
- Вот про это задание про нахождение в массиве последовательностей из подряд стоящих чисел дающих сумму 3 (...)
- Действия над одномерными массивами
- Как (новичку по программированию) прописать программу для переборов комбинаций без повторений.
- Так в Питоне всё-таки "списки" или "массивы"? Просто посмотрел определение списка в информатике - совсем другая вещь...