打卡记录
避免洪水泛滥(贪心 + Map + Set)
链接
将晴天的日期全部记录到 set 中。
使用 unordered_map 来记录每个湖泊上一次下雨的日期。
当下雨时,湖泊已经水满了时,查询到上次下雨的日期。
通过这个日期在晴天记录中查找对应的晴天日期。
如果找到了,就可以使用那一天抽水,找不到就不可避免的洪水了。
class Solution {
public:
vector<int> avoidFlood(vector<int>& rains) {
int n = rains.size();
vector<int> ans(n, 1);
unordered_map<int, int> water;
set<int> zero;
for (int i = 0; i < n; ++i) {
if (rains[i] == 0) {
zero.insert(i);
continue;
}
else if (water.count(rains[i])) {
auto it = zero.lower_bound(water[rains[i]]);
if (it == zero.end()) return {};
ans[*it] = rains[i];
zero.erase(it);
}
water[rains[i]] = i;
ans[i] = -1;
}
return ans;
}
};