Skip to content

Commit 439f583

Browse files
authored
Create 2289.Steps-to-Make-Array-Non-decreasing_v1.cpp
1 parent f0fd034 commit 439f583

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class Solution {
2+
public:
3+
int totalSteps(vector<int>& nums)
4+
{
5+
int n = nums.size();
6+
list<int> List;
7+
unordered_map<int,list<int>::iterator>key2iter;
8+
for (int i=0; i<n; i++)
9+
{
10+
List.push_back(i);
11+
key2iter[i] = prev(List.end());
12+
}
13+
14+
queue<int>q;
15+
for (int i=1; i<n; i++)
16+
if (nums[i-1]>nums[i])
17+
q.push(i);
18+
19+
int step = 0;
20+
while (!q.empty())
21+
{
22+
int len = q.size();
23+
unordered_set<int>Set;
24+
while (len--)
25+
{
26+
int i = q.front();
27+
q.pop();
28+
29+
auto iter = key2iter[i];
30+
if (Set.count(i))
31+
Set.erase(i);
32+
if (next(iter)!=List.end())
33+
Set.insert(*next(iter));
34+
List.erase(iter);
35+
}
36+
37+
for (int i: Set)
38+
{
39+
if (key2iter[i]!=List.begin() && nums[*prev(key2iter[i])] > nums[i])
40+
q.push(i);
41+
}
42+
step++;
43+
}
44+
45+
return step;
46+
}
47+
};

0 commit comments

Comments
 (0)