• [LeetCode] Sliding Window Maximum


    Sliding Window Maximum

    Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.

    For example,
    Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.

    Window position                Max
    ---------------               -----
    [1  3  -1] -3  5  3  6  7       3
     1 [3  -1  -3] 5  3  6  7       3
     1  3 [-1  -3  5] 3  6  7       5
     1  3  -1 [-3  5  3] 6  7       5
     1  3  -1  -3 [5  3  6] 7       6
     1  3  -1  -3  5 [3  6  7]      7
    

    Therefore, return the max sliding window as [3,3,5,5,6,7].

    Note: 
    You may assume k is always valid, ie: 1 ≤ k ≤ input array's size for non-empty array.

    Follow up:
    Could you solve it in linear time?

    单调队列。

     1 class Solution {
     2 public:
     3     vector<int> maxSlidingWindow(vector<int>& nums, int k) {
     4         vector<int> res;
     5         if (k == 0 || nums.size() < k) return res;
     6         deque<int> que;
     7         for (int i = 0; i < k; ++i) {
     8             while (!que.empty() && que.back() < nums[i]) que.pop_back();
     9             que.push_back(nums[i]);
    10         }
    11         res.push_back(que.front());
    12         for (int i = k; i < nums.size(); ++i) {
    13             if (que.front() == nums[i - k]) que.pop_front();
    14             while (!que.empty() && que.back() < nums[i]) que.pop_back();
    15             que.push_back(nums[i]);
    16             res.push_back(que.front());
    17         }
    18         return res;
    19     }
    20 };
  • 相关阅读:
    MySQL创建数据库与创建用户以及授权
    java关于map用来筛选的用法
    C#实体类的关联运用
    PHP 数据库基础操作
    PHP 文件操作
    PHP 加密和解密
    PHP 图形处理
    PHP Cookie和Session
    SQL基本操作
    JAVA基本术语
  • 原文地址:https://www.cnblogs.com/easonliu/p/4657363.html
Copyright © 2020-2023  润新知