Sobes.tech
Назад к вопросам
Senior
8

/ * * Дан массив целых чисел и число X, * требуется найти самый длинный непустой подотрезок, минимум на котором равен X. * Верните длину такого подотрезка или -1, если таких подотрезков нет. * /

Компании, где спрашивали
Яндекс

Ответ от нейросети

sobes.tech AI

Задача: найти самый длинный непустой подотрезок массива, у которого минимум равен X. Если таких нет — вернуть -1.

Идея решения:

  • Перебрать массив, разбивая его на подотрезки, где минимум равен X.
  • Минимум подотрезка — это минимальный элемент в нем. Чтобы минимум был равен X, в подотрезке не должно быть элементов меньше X, и должен быть хотя бы один элемент равный X.

Алгоритм:

  1. Идём по массиву, разбивая его на сегменты, где все элементы >= X.
  2. Для каждого такого сегмента проверяем, есть ли в нём элемент, равный X.
  3. Если есть, обновляем максимальную длину.

Пример реализации на Go:

func longestSubarrayWithMinX(arr []int, X int) int {
    maxLen := -1
    start := 0
    hasX := false

    for i, val := range arr {
        if val < X {
            // Завершаем текущий сегмент
            if hasX && i-start > maxLen {
                maxLen = i - start
            }
            start = i + 1
            hasX = false
        } else {
            if val == X {
                hasX = true
            }
        }
    }

    // Проверка последнего сегмента
    if hasX && len(arr)-start > maxLen {
        maxLen = len(arr) - start
    }

    return maxLen
}

Этот код проходит по массиву один раз, поддерживая текущий сегмент с элементами >= X и флаг наличия X внутри. Если встречается элемент < X, сегмент заканчивается. В итоге возвращается максимальная длина подходящего подотрезка или -1, если таких нет.