150.逆波兰表达式求值
题目链接:150. 逆波兰表达式求值 - 力扣(LeetCode)
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> st;
for (int i = 0; i < tokens.size(); i++) {
if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" ||
tokens[i] == "/") {
long long nums1 = st.top();
st.pop();
long long nums2 = st.top();
st.pop();
if (tokens[i] == "+")
st.push(nums2 + nums1);
if (tokens[i] == "-")
st.push(nums2 - nums1);
if (tokens[i] == "*")
st.push(nums2 * nums1);
if (tokens[i] == "/")
st.push(nums2 / nums1);
} else {
st.push(stoll(tokens[i]));
}
}
long long result = st.top();
st.pop();
return result;
}
};
239.滑动窗口最大值
题目链接239. 滑动窗口最大值 - 力扣(LeetCode)
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
if (nums.empty() || k <= 0) return {};
int n = nums.size();
vector<int> result;
for (int i = 0; i <= n - k; ++i) { // 遍历所有窗口起始位置
int max_val = nums[i]; // 初始化当前窗口的最大值
for (int j = i + 1; j < i + k; ++j) { // 遍历窗口内的元素
if (nums[j] > max_val) {
max_val = nums[j]; // 更新最大值
}
}
result.push_back(max_val); // 记录当前窗口的最大值
}
return result;
}
};
class Solution {
public:
class Mydeque{
public:
deque<int> que;
void push(int val) {
while (!que.empty() && val > que.back()) {
que.pop_back();
}
que.push_back(val);
}
void pop(int val) {
if (!que.empty() && val == que.front()){
que.pop_front();
// 实现的功能是只要不是最大的那个数,就不管.因为这里push维护的是当前k个数最大的数为front
}
}
int front() {
return que.front();
}
};
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
Mydeque que;
vector<int> result;
for (int i = 0; i < k; i++) {
que.push(nums[i]);
}
result.push_back(que.front());
for (int i = k; i < nums.size(); i++) {
que.pop(nums[i-k]); //删掉维护的k个数的前面一个数
que.push(nums[i]);
result.push_back(que.front());
//这里的que是一个对象,想要直接像deque调用front是不可能的,所以要另外写一个函数front()返回
}
return result;
}
};
347.前K个高频元素
题目链接:347. 前 K 个高频元素 - 力扣(LeetCode)
class Solution {
public:
class comparison{
public:
bool operator()(const pair<int,int> &ls, const pair<int,int> &rs) {
return ls.second > rs.second;
}
};
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> map;
for (int i = 0; i < nums.size(); i++) {
map[nums[i]]++; // 先记录频率
}
priority_queue<pair<int,int>, vector<pair<int,int>>, comparison> que; //进行排序
for (auto it = map.begin(); it != map.end(); it++) {
que.push(*it);
if (que.size() > k) { // 只维护K个数
que.pop();
}
}
vector<int> result(k, 0);
for (int i = k - 1; i >= 0; i--) {
result[i] = que.top().first; // 最后倒序输出,因为弹出最小的
que.pop();
}
return result;
}
};
1222

被折叠的 条评论
为什么被折叠?



