Skip to content

Commit 78d3926

Browse files
authored
Create 2121-intervals-between-identical-elements.js
1 parent 695fae0 commit 78d3926

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {number[]} arr
3+
* @return {number[]}
4+
*/
5+
const getDistances = function(arr) {
6+
let n = arr.length
7+
const pre = Array(n).fill(0), suf = Array(n).fill(0), res = Array(n).fill(0), mp = {}
8+
9+
for(let i = 0; i < n; i++) {
10+
if(mp[arr[i]] == null) mp[arr[i]] = []
11+
mp[arr[i]].push(i)
12+
}
13+
14+
Object.keys(mp).forEach(k => {
15+
const idxArr = mp[k]
16+
for(let i = 1; i < idxArr.length; i++) {
17+
pre[idxArr[i]] = pre[idxArr[i - 1]] + i * (idxArr[i] - idxArr[i - 1])
18+
}
19+
})
20+
21+
Object.keys(mp).forEach(k => {
22+
const idxArr = mp[k]
23+
for(let i = idxArr.length - 2; i >= 0; i--) {
24+
suf[idxArr[i]] = suf[idxArr[i + 1]] + (idxArr.length - 1 - i) * (idxArr[i + 1] - idxArr[i])
25+
}
26+
})
27+
28+
for(let i = 0; i < n; i++) res[i] = pre[i] + suf[i]
29+
30+
return res
31+
};

0 commit comments

Comments
 (0)