-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path0895-MaximumFrequencyStack.cs
49 lines (40 loc) · 1.39 KB
/
0895-MaximumFrequencyStack.cs
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
38
39
40
41
42
43
44
45
46
47
48
49
//-----------------------------------------------------------------------------
// Runtime: 372ms
// Memory Usage:
// Link:
//-----------------------------------------------------------------------------
using System.Collections.Generic;
namespace LeetCode
{
public class _0895_MaximumFrequencyStack
{
private readonly IDictionary<int, int> frequencyMap;
private readonly IDictionary<int, Stack<int>> frequencyValues;
private int maxFrequency;
public _0895_MaximumFrequencyStack()
{
frequencyMap = new Dictionary<int, int>();
frequencyValues = new Dictionary<int, Stack<int>>();
maxFrequency = 0;
}
public void Push(int x)
{
if (!frequencyMap.ContainsKey(x))
frequencyMap[x] = 0;
frequencyMap[x] += 1;
if (frequencyMap[x] > maxFrequency)
maxFrequency = frequencyMap[x];
if (!frequencyValues.ContainsKey(frequencyMap[x]))
frequencyValues[frequencyMap[x]] = new Stack<int>();
frequencyValues[frequencyMap[x]].Push(x);
}
public int Pop()
{
var result = frequencyValues[maxFrequency].Pop();
frequencyMap[result] -= 1;
if (frequencyValues[maxFrequency].Count == 0)
maxFrequency--;
return result;
}
}
}