File tree Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments