LeetCode 239. Sliding Window Maximum 时间复杂度(O( n))

时间复杂度(O( k*n))

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> vec;
        for(int i=k-1;i<nums.size();++i){
            int max=nums[i];
            for(int j=i-k+1;j<i;++j)
                if(max<nums[j])max=nums[j];
            vec.push_back(max);
        }
        return vec;
    }
};

 时间复杂度(O( n)) 

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> vec;
        deque<int> deq;
        for(int j=0;j<nums.size();++j){
            while(!deq.empty()&&nums[deq.back()]<nums[j])       deq.pop_back();
            if(!deq.empty()&&deq.front()<=j-k)                  deq.pop_front();
            if(deq.empty()||nums[deq.back()]>=nums[j])          deq.push_back(j);
            if(j>=k-1)    vec.push_back(nums[deq.front()]);
        }
        return vec;
    }
};

猜你喜欢

转载自blog.csdn.net/ziyue246/article/details/81749896