1488. 避免洪水泛滥
1488. Avoid Flood in The City
class Solution {
public:
vector<int> avoidFlood(vector<int>& rains) {
vector<int> ans(rains.size(), 1); // 待输出数组
map<int, int> full_lake; // 用来记录装满水湖泊的位置
set<int> sun_day; // 晴天所在位置
for(int ii = 0; ii < rains.size(); ii++) {
if(!rains[ii]) sun_day.insert(ii); // 晴天
else { // 下雨
if(full_lake.find(rains[ii]) != full_lake.end()) { // 这个湖泊之前被装满过
auto p = sun_day.lower_bound(full_lake[rains[ii]]); // 查找被装满后是否有晴天
if(p == sun_day.end()) return {}; // 没有晴天,那么这次会发生洪水
ans[*p] = rains[ii]; // 有晴天,在有晴天那天把水抽干
sun_day.erase(p);
full_lake[rains[ii]] = ii;
}
ans[ii] = -1;
full_lake[rains[ii]] = ii;
}
}
return ans;
}
};