Skip to content

Commit 4494873

Browse files
authored
Create closest-equal-element-queries.cpp
1 parent 995059c commit 4494873

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

C++/closest-equal-element-queries.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Time: O(n)
2+
// Space: O(n)
3+
4+
// hash table
5+
class Solution {
6+
public:
7+
vector<int> solveQueries(vector<int>& nums, vector<int>& queries) {
8+
vector<int> dist(size(nums), size(nums));
9+
unordered_map<int, int> left;
10+
for (int i = 0; i < 2 * size(nums) - 1; ++i) {
11+
const auto& x = nums[i % size(nums)];
12+
if (left.count(x)) {
13+
dist[i % size(nums)] = min(dist[i % size(nums)], i - left[x]);
14+
}
15+
left[x] = i;
16+
}
17+
unordered_map<int, int> right;
18+
for (int i = 2 * size(nums) - 2; i >= 0; --i) {
19+
const auto& x = nums[i % size(nums)];
20+
if (right.count(x)) {
21+
dist[i % size(nums)] = min(dist[i % size(nums)], right[x] - i);
22+
}
23+
right[x] = i;
24+
}
25+
vector<int> result(size(queries), -1);
26+
for (int i = 0; i < size(queries); ++i) {
27+
if (dist[queries[i]] < size(nums)) {
28+
result[i] = dist[queries[i]];
29+
}
30+
}
31+
return result;
32+
}
33+
};

0 commit comments

Comments
 (0)