相同元素的间隔之和
给你一个下标从 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 };
以自己现在的努力程度,还没有资格和别人拼天赋