class Solution
{
public:
int evalRPN(vector<string>& tokens)
{
stack<int> s;
for (auto& token : tokens)
{
if (token == "+" || token == "-" || token == "*" || token == "/")
{
int num1, num2;
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
if (token == "+")
{
s.push(num1 + num2);
}
else if (token == "-")
{
s.push(num1 - num2);
}
else if (token == "*")
{
s.push(num1 * num2);
}
else
{
s.push(num1 / num2);
}
}
else
{
s.push(stoi(token));
}
}
return s.top();
}
};
class Solution
{
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k)
{
int left{ 0 }, right{ k - 1 };
priority_queue<pair<int, int>> heap;
vector<int> ans;
for (int i = left; i <= right; i++)
{
heap.emplace(nums[i], i);
}
ans.push_back(heap.top().first);
left++;
right++;
while (right < nums.size())
{
heap.emplace(nums[right], right);
auto temp{ heap.top() };
while (temp.second < left)
{
heap.pop();
temp = heap.top();
}
ans.push_back(temp.first);
left++;
right++;
}
return ans;
}
};
class Solution
{
public:
vector<int> topKFrequent(vector<int>& nums, int k)
{
auto cmp = [](pair<int, int>left, pair<int, int>right)->bool {return left.second > right.second; };
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> heap(cmp);
unordered_map<int, int> map;
vector<int> ans;
for (auto& num : nums)
{
map[num]++;
}
for (auto& m : map)
{
if (heap.size() < k)
{
heap.emplace(m.first, m.second);
}
else
{
if (m.second > heap.top().second)
{
heap.pop();
heap.emplace(m.first, m.second);
}
}
}
while (!heap.empty())
{
ans.push_back(heap.top().first);
heap.pop();
}
return ans;
}
};