Как найти минимальное положительное число K такое, что для каждого элемента массива добавление или вычитание числа из [-K, K] может привести к строго возрастающему массиву?
Например:
- массив [10, 2, 20]
- min K равно 5, возможным результатом является [10-5, 2 + 4, 20]
- k = 4 не в порядке, потому что 10-4 == 2 + 4; массив не может быть преобразован строго в порядке возрастания
Мое предположение выглядит следующим образом
определить f (i, j) = a [i] - a [j] + ji-1 (для я < j и a [i] > a [j]: все пары обратного порядка)
Мин K должен удовлетворять условию:
2 * K > max f (i, j)
потому что, если пара (i, j) не находится в порядке возрастания, a [j] может добавить только K не более, a [i] может вычесть K не более, и вам нужно оставить место для элементов между [ i] и a [j] (поскольку он строго возрастает), поэтому (a [j] + K) - (a [i] - K) должно быть больше (j-i-1) (длина между ними).
Итак, k >= max f (i, j)/2 + 1
Проблема заключается в том, что я не могу доказать, является ли k = max f (i, j)/2 + 1 ОК или нет?
больше подсказок:
Я думал о том, что найти алгоритм для определения заданного К достаточно или нет, тогда мы может использовать алгоритм, чтобы попробовать каждый K от возможного минимума, чтобы найти решение.
i'v придумал такой алгоритм:
for i in n->1 # n is array length
if i == n:
add K to a[i] # add the max to the last item won't affect order
else:
# the method is try to make a[i] as big as possible and still < a[i+1]
find a num k1 in [-K, K] to make a[i] to bottom closest to a[i+1]-1
if found:
add k1 to a[i]
else no k1 in [-K, K] can make a[i] < a[i+1]
return false
return true
Я тоже такой алгоритм прав или нет