Skip to content

Commit 99384ae

Browse files
authored
Create 2090-k-radius-subarray-averages.js
1 parent dd8964f commit 99384ae

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

2090-k-radius-subarray-averages.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
const lowBit = (x) => x & -x
2+
class FenwickTree {
3+
constructor(n) {
4+
if (n < 1) return
5+
this.sum = Array(n + 1).fill(0)
6+
}
7+
update(i, delta) {
8+
if (i < 1) return
9+
while (i < this.sum.length) {
10+
this.sum[i] += delta
11+
i += lowBit(i)
12+
}
13+
}
14+
query(i) {
15+
if (i < 1) return 0
16+
let sum = 0
17+
while (i > 0) {
18+
sum += this.sum[i]
19+
i -= lowBit(i)
20+
}
21+
return sum
22+
}
23+
}
24+
/**
25+
* @param {number[]} nums
26+
* @param {number} k
27+
* @return {number[]}
28+
*/
29+
const getAverages = function(nums, k) {
30+
const n = nums.length
31+
const bit = new FenwickTree(n)
32+
for(let i = 0; i < n; i++) {
33+
bit.update(i + 1, nums[i])
34+
}
35+
const res = Array(n).fill(-1)
36+
// console.log(bit)
37+
for(let i = k; i < n - k; i++) {
38+
const pre = bit.query(i + 1 - k - 1), cur = bit.query(i + 1 + k)
39+
res[i] = ~~((cur - pre) / (k * 2 + 1))
40+
}
41+
42+
return res
43+
};

0 commit comments

Comments
 (0)