File tree Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time: O(nlogn)
2
+ // Space: O(n)
3
+
4
+ class Solution {
5
+ public:
6
+ vector<int > avoidFlood (vector<int >& rains) {
7
+ unordered_map<int , vector<int >> lookup;
8
+ for (int i = rains.size () - 1 ; i >= 0 ; --i) {
9
+ lookup[rains[i]].emplace_back (i);
10
+ }
11
+ vector<int > result;
12
+ priority_queue<int , vector<int >, greater<int >> min_heap;
13
+ for (int i = 0 ; i < rains.size (); ++i) {
14
+ if (rains[i]) {
15
+ if (lookup[rains[i]].size () >= 2 ) {
16
+ lookup[rains[i]].pop_back ();
17
+ min_heap.emplace (lookup[rains[i]].back ());
18
+ }
19
+ result.emplace_back (-1 );
20
+ } else if (!min_heap.empty ()) {
21
+ int j = min_heap.top (); min_heap.pop ();
22
+ if (j < i) {
23
+ return {};
24
+ }
25
+ result.emplace_back (rains[j]);
26
+ } else {
27
+ result.emplace_back (1 );
28
+ }
29
+ }
30
+ return min_heap.empty () ? result : vector<int >();
31
+ }
32
+ };
You can’t perform that action at this time.
0 commit comments