150. 逆波蘭表示式求值
文章連結:https://programmercarl.com/0150.逆波蘭表示式求值.html#演算法公開課
題目連結:https://leetcode.cn/problems/evaluate-reverse-polish-notation/description/
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> st;
long long result;
for(int i=0;i<tokens.size();i++){
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
long long res=0;
long long num1=st.top();
st.pop();
long long num2=st.top();
st.pop();
if(tokens[i]=="+") res=num2+num1;
else if(tokens[i]=="-") res=num2-num1;
else if(tokens[i]=="*") res=num2*num1;
else if(tokens[i]=="/") res=num2/num1;
st.push(res);
}
else st.push(stoll(tokens[i]));
}
result=st.top();
return result;
}
};
239. 滑動視窗最大值
文章連結:https://programmercarl.com/0239.滑動視窗最大值.html#演算法公開課
影片連結:https://www.bilibili.com/video/BV1XS4y1p7qj/?vd_source=6cb513d59bf1f73f86d4225e9803d47b
題目連結:https://leetcode.cn/problems/sliding-window-maximum/
class Solution {
private:
//實現一種資料結構deque,使得其能完成pop出移走的元素,push新加的元素,並front得到佇列頭元素
//佇列只維護最大的元素,隊內是遞減的數列
class Mydeque{
public:
deque<int> que;
//實現pop操作,如果佇列頭元素與滑動視窗移出的元素相同,則真pop
void pop(int val){
if(!que.empty()&&val==que.front()) que.pop_front();
}
//實現push操作,如果push的時候,前面的值不能大於壓入的值,否則移除前面的值
void push(int val){
while(!que.empty()&&que.back()<val) que.pop_back(); //注意:que.back()不可以等於val!!!
que.push_back(val);
}
//佇列頭元素即為我們所求視窗內的最大元素
int front(){
return que.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
Mydeque dq;
vector<int> result;
for(int i=0;i<k;i++){
dq.push(nums[i]);
}
result.push_back(dq.front());
for(int j=k;j<nums.size();j++){
dq.pop(nums[j-k]);
dq.push(nums[j]);
result.push_back(dq.front());
}
return result;
}
};
347.前 K 個高頻元素
文章連結:https://programmercarl.com/0347.前K個高頻元素.html#演算法公開課
影片連結:https://www.bilibili.com/video/BV1Xg41167Lz/?vd_source=6cb513d59bf1f73f86d4225e9803d47b
題目連結:https://leetcode.cn/problems/top-k-frequent-elements/description/
前置知識
priority_queue
:
定義:priority_queue<Type, Container, Functional>
Type 就是資料型別,Container 就是容器型別(Container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list。STL裡面預設用的是vector),Functional 就是比較的方式,當需要用自定義的資料型別時才需要傳入這三個引數,使用基本資料型別時,只需要傳入資料型別,預設是大頂堆
//升序佇列
priority_queue <int,vector<int>,greater<int> > q;
//降序佇列
priority_queue <int,vector<int>,less<int> >q;
//greater和less是std實現的兩個仿函式(就是使一個類的使用看上去像一個函式。其實現就是類中實現一個operator(),這個類就有了類似函式的行為,就是一個仿函式類了)
————————————————
原文連結:https://blog.csdn.net/weixin_36888577/article/details/79937886