239. Sliding Window Maximum
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> result;
//use the multiset to get the max-value
multiset<int> w;
for(int i=0; i<nums.size(); i++){
//erase the previous top element
if(i>=k) w.erase(w.find(nums[i-k]));
w.insert(nums[i]);
//insert the max-value of the window
//if(i>=k-1) result.push_back(*w.rbegin());
if(i>=k-1) result.push_back(*(--w.end())); // can be work,either.
}
return result;
}
};
/* Memory Limit Exceeded Jacob Given nums = [1,3,-1,-3,5,3,6,7], and k = 3. is OK*/
/*class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> ret;
if(nums.size() == 0) return ret;
if(k>nums.size()) return ret;
vector<vector<int>> dp(nums.size()-k+1,vector<int>(k,0));
dp[0][k-1] = nums[k-1];
for(int j = k-2;j>=0;j--)
{
dp[0][j] = max(dp[0][j+1],nums[j]);
}
for(int i = 1; i<=nums.size()-k;i++)
{
for(int j = 0;j<k-1;j++)
{
dp[i][j] = max(dp[i-1][j+1],nums[i+k-1]);
}
dp[i][k-1] = nums[i+k-1];
}
for(int i = 0; i<dp.size();i++)
{
ret.push_back(dp[i][0]);
}
return ret;
}
};
*/
/* Acception of others */