Поиск ближайшего большего значения в массиве
есть возрастающий массив [1,2, 5, 22, 33, 44, 312] и мне нужно получить ближайшее большее значение для числа, например для 10 это будет 22, для 3 это 5 и тд
Ответы (3 шт):
Автор решения: denikotin
→ Ссылка
Если совсем просто то так:
number = 10
array = [3,5,7,22,55,123]
i = 0
while i <= len(array):
if number <= array[i]:
requiredNumber = array[i]
i +=1
Автор решения: Neuro
→ Ссылка
def binary_search(data, elem):
elem+=1
low = 0
high = len(data) - 1
while low <= high:
middle = (low + high)//2
if data[middle] == elem:
return middle
elif data[middle] > elem:
high = middle - 1
else:
low = middle + 1
return middle
Код основан на бинаронм поиске, он находит первый элемент >=x, точнее его индекс
Автор решения: Qwertiy
→ Ссылка
Для неотсортированного массива. Для отсортированного лучше использовать бинпоиск.
Python 3.4+: tio.run
def f(a, val):
return min((x for x in a if x > val), default=None)
a = [1, 2, 5, 22, 33, 44, 312]
print(f(a, 3))
print(f(a, 10))
print(f(a, 1000))
Более ранние версии: tio.run
def f(a, val):
return min([x for x in a if x > val] or [None])
a = [1, 2, 5, 22, 33, 44, 312]
print(f(a, 3))
print(f(a, 10))
print(f(a, 1000))
Вывод в обоих случаях:
5
22
None