逆波兰表达式求值
题目链接
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> st;
for(auto str : tokens){
if(str == "+"){
int num2 = st.top();
st.pop();
int num1 = st.top();
st.pop();
st.push(num1 + num2);
}
else if(str == "-"){
int num2 = st.top();
st.pop();
int num1 = st.top();
st.pop();
st.push(num1 - num2);
}
else if(str == "*"){
int num2 = st.top();
st.pop();
int num1 = st.top();
st.pop();
st.push(num1 * num2);
}
else if(str == "/"){
int num2 = st.top();
st.pop();
int num1 = st.top();
st.pop();
st.push(num1 / num2);
}
else{
int num = std::atoi(str.c_str());
st.push(num);
}
}
return st.top();
}
};
滑动窗口最大值
题目链接
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> deq;
vector<int> res;
for(int i = 0; i < k; i++){
// 保持front()->back()单调不递增
while(!deq.empty() && deq.back() < nums[i]){
deq.pop_back();
}
deq.push_back(nums[i]);
}
res.push_back(deq.front());
int l = 0;
for(int i = k; i < nums.size(); i++){
if(nums[l] == deq.front())
deq.pop_front();
while(!deq.empty() && deq.back() < nums[i])
deq.pop_back();
deq.push_back(nums[i]);
res.push_back(deq.front());
l++;
}
return res;
}
};
前 K 个高频元素
题目链接
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> count;
for(int num : nums){
count[num]++;
}
vector<vector<int>> temp;
vector<int> res;
for(auto a : count){
temp.push_back({a.first, a.second});
}
sort(temp.begin(), temp.end(), [](vector<int>a, vector<int>b){
return a[1] > b[1];
});
for(int i = 0; i < k; i++){
res.push_back(temp[i][0]);
}
return res;
}
};