Поиск пропущенного значения в данном массиве обрабатывается в этом посте. Определение проблемы можно подтвердить по следующему URL-адресу.



Описание задания

Это демонстрационная задача.

Напишите функцию:

защитное решение (A)

что для заданного массива A из N целых чисел возвращается наименьшее положительное целое число (больше 0), которое не встречается в A.

Например, если A = [1, 3, 6, 4, 1, 2], функция должна вернуть 5.

Учитывая A = [1, 2, 3], функция должна вернуть 4.

Учитывая A = [−1, −3], функция должна возвращать 1.

Напишите эффективный алгоритм для следующих предположений:

  • N — целое число в диапазоне [1..100 000];
  • каждый элемент массива A является целым числом в диапазоне [−1 000 000..1 000 000].

Авторские права, 2009–2020 гг., принадлежат Codility Limited. Все права защищены. Несанкционированное копирование, публикация или разглашение запрещено.

Ключевой момент

  • Применение алгоритма сортировки перед поиском пропущенного значения может повысить эффективность.
  • Некоторые хитрые условные операции для прямого возврата ответа до проведения линейного поиска позволяют избежать ненужной работы. Это значит, что дает эффективность.

Решение (с использованием Python)

def solution(A):
    A.sort()
    if(A[-1] <= 0): return 1 # Trick-1
    try: _ = A.index(1) # Trick-2
    except: return 1
    int_min = A[-1] + 1
    for idx in range(len(A)-1):
        if(A[idx] <= 0 or A[idx+1] <= 0): continue
        if(abs(A[idx] - A[idx+1]) > 1):
            int_min = min(int_min, A[idx] + 1)
            break
    return int_min
  • Уловка-1: когда последнее значение массива находится в отрицательной области (после сортировки массива), это означает, что все элементы имеют отрицательное значение. Таким образом, вы можете вернуть 1 напрямую без каких-либо операций.
  • Уловка-2: наименьшее значение среди положительных целых чисел равно 1. Если массив включает большее положительное значение, но не включает 1, возвращаемое значение равно 1 при обработке исключений.

Используйте приведенное выше решение для справки.
Я рекомендую вам написать собственный исходный код.

Связанный пост



[Codility] Урок-04.2: MaxCounters
Проблема под названием «MaxCounters
решается с помощью этого поста. URL-адрес для подтверждения исходной задачи:medium.com»