基础版:
// 5965. 相同元素的间隔之和
class Solution {
public long[] getDistances(int[] arr) {
// 提前生命对应大小的返回值
long[] ans = new long[arr.length];
// 存储位置信息
Map<Integer, List<Integer>> map = new HashMap<>();
// 将所有出现的元素存入map中
for(int i = 0; i < arr.length; i++){
if(!map.containsKey(arr[i])){
// 如果未出现过则直接创建新的集合
ArrayList<Integer> sub = new ArrayList<>();
sub.add(i);
map.put(arr[i],sub);
}else{
map.get(arr[i]).add(i);
}
}
// 取出每一个值相同的元素,计算它们的下标
for(Integer i : map.keySet()){
// 获取元素为 i在arr中出现的所有位置信息
List<Integer> sub = map.get(i);
// 外层拿一个位置与其它所有位置的元素进行计算
for(int j = 0; j < sub.size(); j++){
// 当前的位置
int indVal = sub.get(j);
// 内层计算截止当前,每个位置所对应的值
for(int k = 0; k < sub.size(); k++){
// 跳过相同的位置
if(j == k)
continue;
// 计算当前sub.get(k)应该累加的值
int val = Math.abs(indVal - sub.get(k));
ans[sub.get(k)] += val;
}
}
}
return ans;
}
}