這三道題倒是有點意思的
150題還好 就是讀元素 然後進行相應的操作
1 class Solution { 2 public: 3 int evalRPN(vector<string>& tokens) { 4 vector<int>Stack; 5 int tmp; 6 for(int i=0;i<tokens.size();i++){ 7 if(tokens[i] =="+"){ 8 tmp = Stack[Stack.size()-2]+Stack[Stack.size()-1]; 9 Stack.pop_back(); 10 Stack.pop_back(); 11 Stack.push_back(tmp); 12 } 13 else if(tokens[i] =="-"){ 14 tmp = Stack[Stack.size()-2]-Stack[Stack.size()-1]; 15 Stack.pop_back(); 16 Stack.pop_back(); 17 Stack.push_back(tmp); 18 } 19 else if(tokens[i] =="*"){ 20 tmp = Stack[Stack.size()-2]*Stack[Stack.size()-1]; 21 Stack.pop_back(); 22 Stack.pop_back(); 23 Stack.push_back(tmp); 24 } 25 else if(tokens[i] =="/"){ 26 tmp = Stack[Stack.size()-2]/Stack[Stack.size()-1]; 27 Stack.pop_back(); 28 Stack.pop_back(); 29 Stack.push_back(tmp); 30 } 31 else{ 32 Stack.push_back(stoi(tokens[i])); 33 } 34 } 35 return Stack.back(); 36 } 37 };
239滑動視窗我一開始理解錯題目了,以為是求滑動視窗的和的最大值,就離譜,然後琢磨半天用單調佇列處理。
1 class Solution { 2 public: 3 vector<int> maxSlidingWindow(vector<int>& nums, int k) { 4 deque<int> dq; // 雙端佇列,用於儲存視窗內元素的索引 5 vector<int> result; // 儲存每個視窗的最大值 6 7 // 處理初始的第一個視窗 8 for (int i = 0; i < k; ++i) { 9 // 對滑入的元素進行入隊操作,保持佇列單調遞減 10 while (!dq.empty() && nums[dq.back()] < nums[i]) { 11 dq.pop_back(); // 移除所有小於當前元素的元素 12 } 13 dq.push_back(i); // 將當前元素的索引加入佇列 14 } 15 result.push_back(nums[dq.front()]); // 第一個視窗的最大值 16 17 // 處理剩餘的元素 18 for (int i = k; i < nums.size(); ++i) { 19 // 移除滑出視窗的元素 20 if (!dq.empty() && dq.front() == i - k) { 21 dq.pop_front(); 22 } 23 24 // 對滑入的元素進行入隊操作,保持佇列單調遞減 25 while (!dq.empty() && nums[dq.back()] < nums[i]) { 26 dq.pop_back(); 27 } 28 dq.push_back(i); // 將當前元素的索引加入佇列 29 30 // 當前視窗的最大值 31 result.push_back(nums[dq.front()]); 32 } 33 34 return result; 35 } 36 };
347題只會寫呆方法,雜湊再排序,堆是真不會。
1 class Solution { 2 public: 3 vector<int> topKFrequent(vector<int>& nums, int k) { 4 // 雜湊表記錄每個元素的出現次數 5 unordered_map<int, int> frequencyMap; 6 for (int num : nums) { 7 frequencyMap[num]++; 8 } 9 10 // 將雜湊表中的元素轉存到一個vector中進行排序 11 vector<pair<int, int>> freqVec(frequencyMap.begin(), frequencyMap.end()); 12 13 // 按照出現次數從大到小進行排序 14 sort(freqVec.begin(), freqVec.end(), [](const pair<int, int>& a, const pair<int, int>& b) { 15 return a.second > b.second; 16 }); 17 18 // 輸出前k個高頻元素 19 vector<int> result; 20 for (int i = 0; i < k; ++i) { 21 result.push_back(freqVec[i].first); 22 } 23 24 return result; 25 } 26 };