K Radius Subarray Averages
MediumArraySliding Window
Solution
import { range } from '@algorithm/lib';
export function getAverages(nums: number[], k: number): number[] {
if (k === 0) {
return nums;
}
const n = nums.length;
const averages = new Array<number>(n).fill(-1);
if (n < 2 * k + 1) {
return averages;
}
let rangeSum = nums.slice(0, 2 * k + 1).reduce((acc, num) => acc + num, 0);
averages[k] = Math.floor(rangeSum / (2 * k + 1));
for (const i of range(2 * k + 1, n)) {
rangeSum += nums[i] - nums[i - (2 * k + 1)];
averages[i - k] = Math.floor(rangeSum / (2 * k + 1));
}
return averages;
}