5.3删除相邻重复项元素
class Solution {
public:
string removeDuplicates(string s) {
stack<int> st;
for(char r : s){
if(st.empty()||r!=st.top())//栈空或者当前字符不等于上一个字符时
st.push(r);//入栈
else
st.pop();//相等则出栈
}
string result = "";
while(!st.empty()){//出栈
result += st.top();
st.pop();
}
reverse(result.begin(),result.end());//翻转字符
return result;
}
};
5.4逆波兰表达式
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> st;
for(int i = 0;i<tokens.size();i++){
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){//如果为操作符,则对栈顶两元素进行操作
long long num1=st.top();
st.pop();
long long num2=st.top();
st.pop();
if(tokens[i]=="+") st.push(num2+num1);
if(tokens[i]=="-") st.push(num2-num1);
if(tokens[i]=="*") st.push(num2*num1);
if(tokens[i]=="/") st.push(num2/num1);
}
else
st.push(stoll(tokens[i]));//不为操作符,则将字符串元素入栈
}
long long result = st.top();
st.pop();
return result;
}
};
5.5滑动窗口最大值
class Solution {
private:
class MyQueue{
public:
deque<int> que;
void pop(int value){//将队头相等于关键字的元素出队
if(!que.empty()&&value == que.front())
que.pop_front();
}
void push(int value){//
while(!que.empty()&&value > que.front())
que.pop_back();
que.push_back(value);
}
int front(){
return que.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
MyQueue 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]);
que.push(nums[i]);
result.push_back(que.front());
}
return result;
}
};
6.1树的前、中、后序遍历
class Solution {
public:
void Traversal(TreeNode* T,vector<int>& vec){
if(T == nullptr) return;
vec.push_back(T -> val);
Traversal(T -> left,vec);
Traversal(T -> right,vec);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
Traversal(root,result);
return result;
}
};
//中序
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
traversal(cur->left, vec); // 左
vec.push_back(cur->val); // 中
traversal(cur->right, vec); // 右
}
//后序
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
vec.push_back(cur->val); // 中
}