он никак не зависит от пропсов или стейта и не меняется?
сумма n квадратов даст n(n+1)(2n+1)/6. Ее можно вывести, если взять ряд f(x)=1+x+x^2+...+x^n = (1-x^{n+1})/(1-x) и найти (x*f'(x))'. Потом туда можно подставить x=1.
по такой логике для [2, 1, 1, 1] должно быть [2, -1, 1, -1] - предпоследняя единица достает до края, и потому последняя должна уйти в минус как бесполезная...
function processDirection(arr, first, end, step) {
let top = -1;
let max = -1;
for (let i = first; i !== end; i += step) {
const value = arr[i];
if (value <= top || (max > value && Math.abs(i - end) <= top + 1)) {
arr[i] = -1;
} else {
max = top = value;
}
top--;
}
}
function updateArray(arr) {
processDirection(arr, 0, arr.length, 1);
processDirection(arr, arr.length - 1, -1, -1);
return arr;
}
Да, этот кейс я профакапил. Поправил