вопрос из задачника, никак не пойму, что нужно сделать
дан массив из чисел, в каждом шаге можно прибавить +1, нужно найти минимальное количество шагов при котором числа в массиве будут по возрастанию, на пример։ x=[1,1,1]
этот массив можно сортировать по возрастанию тремя шагами :
x=[1,1,1]
x=[1,2,2]
x=[1,2,3]
нужно написать функцию которое получает массив и возвращает необходимое количество шагов, при котором числа внутри отсортированы по возрастанию.
Всего есть четыре варианта :
на входе:[1,1,1], на выходе:3
на входе:[-1000,0,-2,0], на выходе:5
на входе:[2,1,10,1], на выходе:12
на входе:[2,3,3,5,5,5,4,12,12,10,15], на выходе:13
function solution(x){ let count=0 for(i=0;i<x.length;i++){ if(x[i]<=[i]){ count++ } } return count //мой вариант кода }
Алгоритм такой. Берешь i-e число из массива и берешь i-1 число из массива. Смотришь которое больше, идут ли они в возрастающем порядке. Считаешь на сколько нужно изменить число чтобы они шли в возрастающем порядке. Меняешь число в массиве и уже измененное число сравниваешь со следующим из массива. Сумма этих “на сколько нужно изменить” и будет ответом.
function getSteps(arr) {
// делаем копию массива чтобы наши изменения массива
// не повлияли на значения в массиве из аргумента
var arrCopy = arr.slice()
var steps = 0
// начинаем со второго элемента массива, и "оглядываемся"
// на предыдущий. Сравниваем числа чтобы понять в порядке
// возрастания ли они и на сколько нужно изменить
// рассматриваемое число чтобы понять чтобы
for (var i = 1; i < arrCopy.length; i += 1) {
var prev = arrCopy[i-1]
var current = arrCopy[i]
if (current > prev) {
// ничего не надо делать, числа уже в
// возрастающем порядке
} else {
// считаем на сколько числа разнятся. Эта разница + 1 и
// будет количество шагов за сколько можно изменить значение
var diff = prev - current + 1
// Для массива [10, 8] разница будет 2, добавляем 1 и
// получаем что к 8 нужно добавить 3 (в соответственно
// 3 шага из + 1 чтобы число стало гарантированно больше 10)
steps += diff
// Заменяем число в копии массива чтобы на следующей
// итерации работать уже с ним а не с оригинальным
arrCopy[i] = current + diff
}
}
return steps
}