Skip to content

Commit c850817

Browse files
authored
Create intervals-between-identical-elements.cpp
1 parent 861819a commit c850817

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Time: O(n)
2+
// Space: O(n)
3+
4+
class Solution {
5+
public:
6+
vector<long long> getDistances(vector<int>& arr) {
7+
unordered_map<int, vector<long long>> lookup;
8+
for (int i = 0; i < size(arr); ++i) {
9+
lookup[arr[i]].emplace_back(i);
10+
}
11+
vector<long long> result(size(arr));
12+
for (const auto& [_, idxs] : lookup) {
13+
vector<long long> prefix(1);
14+
for (const auto& i : idxs) {
15+
prefix.emplace_back(prefix.back() + i);
16+
}
17+
for (int i = 0; i < size(idxs); ++i) {
18+
result[idxs[i]] = (idxs[i] * (i + 1) - prefix[i + 1]) + ((prefix[size(idxs)] - prefix[i]) - idxs[i] * (size(idxs) - i));
19+
}
20+
}
21+
return result;
22+
}
23+
};

0 commit comments

Comments
 (0)