Учитывая вектор из n элементов целочисленного типа, какой алгоритм эффективнее генерирует минимальное число шагов преобразования, в результате чего вектор, у которого все его элементы равны, зная, что:
- за один шаг вы можете перенести не более одной точки от элемента к его соседям ([0, 3, 0] -> [1, 2, 0] в порядке, но не [0, 3, 0] -> [1,1, 1]).
- за один шаг элемент может получить 2 балла: один от своего соседа слева и один справа ([3, 0, 3] -> [2, 2, 2]).
- первый элемент и последний элемент имеют только одного соседа, соответственно, 2-й элемент и элемент n-1.
- элемент не может быть отрицательным ни на одном этапе.
Примеры:
Given :
0, 3, 0
Then 2 steps are required :
1, 2, 0
1, 1, 1
Given :
3, 0, 3
Then 1 step is required :
2, 2, 2
Given :
4, 0, 0, 0, 4, 0, 0, 0
Then 3 steps are required :
3, 1, 0, 0, 3, 1, 0, 0
2, 1, 1, 0, 2, 1, 1, 0
1, 1, 1; 1, 1, 1, 1, 1
Мой текущий алгоритм основан на суммах целых чисел на каждой стороне элемента.Но я не уверен, что это приведет к минимальным шагам.
К вашему сведению, проблема в части конкурса кода (созданного Criteo http://codeofduty.criteo.com), который окончен.