Back to questions
Senior
9
/ * * Дан массив целых чисел и число X, * требуется найти самый длинный непустой подотрезок, минимум на котором равен X. * Верните длину такого подотрезка или -1, если таких подотрезков нет. * /
Companies where asked
Яндекс
Answer from AI
sobes.tech AI
Задача: найти самый длинный непустой подотрезок массива, у которого минимум равен X. Если таких нет — вернуть -1.
Идея решения:
- Перебрать массив, разбивая его на подотрезки, где минимум равен X.
- Минимум подотрезка — это минимальный элемент в нем. Чтобы минимум был равен X, в подотрезке не должно быть элементов меньше X, и должен быть хотя бы один элемент равный X.
Алгоритм:
- Идём по массиву, разбивая его на сегменты, где все элементы >= X.
- Для каждого такого сегмента проверяем, есть ли в нём элемент, равный X.
- Если есть, обновляем максимальную длину.
Пример реализации на 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, если таких нет.