по такой логике для [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;
}
Если авайтить эти функции в других функциях, запущенных параллельно, то будут микротаски к исходно зарезолвленным промисам, они тоже в порядке очереди.
const awaitOne = async () => { await one(); }
const awaitTwo = async () => { await two(); }
awaitOne()
awaitTwo() // Выведет 1 потом 2
one(); two();
- это просто два полностью синхронных действия. Если авайтить эти функции в других функциях, запущенных параллельно, то будут микротаски к исходно зарезолвленным промисам, они тоже в порядке очереди.
для сумм k-й степени есть общий подход:
(i+1)^(k+1) - i^(k+1) = (k+1)*i^k + ...
если это просуммировать для i от 1 до n, то в левой части почти всё сократится. Ну и далее всё делим на (k+1) и выносим сумму i^k в одну сторону, всё остальное в другую, и получаем сумму i^k через суммы для всех предыдущих степеней