相同元素的间隔之和
给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。
arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地,arr[i] 和 arr[j] 之间的间隔是 |i - j| 。
返回一个长度为 n 的数组 intervals ,其中 intervals[i] 是 arr[i] 和 arr 中每个相同元素(与 arr[i] 的值相同)的 间隔之和 。
注意:|x| 是 x 的绝对值。
/**
* 以下两种方式时间复杂度不通过 题解没看懂
*/
const getDistances = (arr = [2, 1, 3, 1, 2, 3, 3]) => {
arr.unshift(-1)
const res = []
const len = arr.length
for (let i = 1; i < len; i++) {
const v = arr[i]
arr[i] = -1
let index = 0
let sum = 0
while (index !== -1) {
index = arr.indexOf(v, index + 1)
if (index !== -1) {
sum += Math.abs(i - index)
}
}
res.push(sum)
arr[i] = v
}
return res
};
const getDistances = (arr = [2, 1, 3, 1, 2, 3, 3]) => {
const map = {}
const len = arr.length
const res = []
arr.forEach((v, i) => {
if (!map[v]) {
map[v] = []
}
map[v].push(i)
})
for (let i = 0; i < len; i++) {
const v = arr[i]
let sum = 0
for (let j = 0; j < map[v].length; j++) {
if (i !== map[v][j]) {
sum += Math.abs(i - map[v][j])
}
}
res.push(sum)
}
return res
};
以自己现在的努力程度,还没有资格和别人拼天赋

浙公网安备 33010602011771号