Поиск ближайшего большего значения в массиве

есть возрастающий массив [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
→ Ссылка