-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1182-ShortestDistanceToTargetColor.cpp
More file actions
37 lines (32 loc) · 1.05 KB
/
Copy path1182-ShortestDistanceToTargetColor.cpp
File metadata and controls
37 lines (32 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
public:
vector<int> shortestDistanceColor(vector<int>& colors, vector<vector<int>>& queries) {
const int n = colors.size();
std::vector<std::vector<int> > dist(4, std::vector<int>(n, -1));
std::vector<int> lv(4, -1);
for(int p = 0; p < n; p++){
lv[colors[p]] = p;
for(int col = 1; col <= 3; col++){
if(lv[col] < 0){continue;}
dist[col][p] = p - lv[col];
}
}
std::vector<int> rv(4, -1);
for(int p = n - 1; p >= 0; p--){
rv[colors[p]] = p;
for(int col = 1; col <= 3; col++){
if(rv[col] < 0){continue;}
int cur = rv[col] - p;
if(dist[col][p] < 0){dist[col][p] = cur;}
else{dist[col][p] = std::min(cur, dist[col][p]);}
}
}
std::vector<int> cv;
for(std::vector q : queries){
int idx = q[0];
int col = q[1];
cv.push_back(dist[col][idx]);
}
return cv;
}
};