#include <cstddef> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型vector * @param size int整型 * @return int整型vector */ vector<int> maxInWindows(vector<int>& num, int size) { // write code here std::vector<int> maxNumList; std::vector<int> storedNode; if (num.size() < size or size == 0){ return maxNumList; } if (num.size() == 1 or size == 1){ return num; } for (int start_pivot = 0; start_pivot <= num.size()-size; start_pivot++){ std::vector<int> window(size); std::copy(num.begin()+start_pivot, num.begin()+start_pivot+size, window.begin()); if (start_pivot == 0){ int max = window[0]; storedNode = initStoredNode(window, max); maxNumList.push_back(max); }else{ maxNumList.push_back(findMaxInList(storedNode, window)); } } return maxNumList; } vector<int> initStoredNode(vector<int>& window, int& max){ vector<int> storedNode; for (int i = 0; i < window.size(); i++){ if (max < window[i]){ max = window[i]; } if (i < window.size()-1 and window[i] >= window[i+1] and i != 0){ storedNode.push_back(window[i]); } } storedNode.push_back(window[window.size()-1]); return storedNode; } int findMaxInList(vector<int>& storedNode, vector<int>& window){ int max = window[window.size()-1]; for (auto &elem : storedNode){ if (elem >= max){ max = elem; } } if (storedNode[0] == window[0]){ storedNode.erase(storedNode.begin()); } if (storedNode[storedNode.size()-1] < window[window.size()-1]){ storedNode.erase(storedNode.end()-1); } storedNode.push_back(window[window.size()-1]); return max; } };