zoukankan      html  css  js  c++  java
  • [LeetCode]Sliding Window Maximum

    题目:Sliding Window Maximum

    给定一个数组和滑动窗口的大小,窗口从开始位置每次向后滑动一格,找出每次窗口的最大值;

    思路:

    记录当前窗口的最大值下标,每次移动一格时,最小下标会移出窗口,邻接着的最大下标会移入窗口;

    因此,每次窗口移动时,首先比较移入的是否比当前最大值还大,是则更新最大值;然后判断移出的是否是最大值,是则重新找最大值。

    vector<int> LeetCode::maxSlidingWindow(vector<int>& nums, int k){
        vector<int>arr;
        if (!nums.size())return arr;
        int max = 0;
        for (size_t i = 1; i < k && i < nums.size(); i++){//找第一个最大值
            if (nums.at(i) >= nums.at(max))max = i;
        }
        arr.push_back(nums.at(max));
        if (k >= nums.size())return arr;
        for (size_t i = k; i < nums.size(); i++){
            if (nums.at(i) >= nums.at(max))max = i;//更新新窗口的最大值
            else if (i - k >= max){//旧窗口的最大值移出去了,且新窗口的最大值小于移出去的最大值
                //找新的最大值
                ++max;
                for (size_t j = max + 1; j <= i; ++j){
                    if (nums.at(j) >= nums.at(max))max = j;
                }
            }
            arr.push_back(nums.at(max));
        }
        return arr;
    }
  • 相关阅读:
    MVC3 验证码
    说说.NET反编译工具
    HTTP协议学习
    Spring Web Flow 的优缺点
    Java CLASSPATH 引发的问题
    MySQL 高级
    Java Policy
    AJAX
    数据结构与算法学习资源
    C#学习资源
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/6819132.html
Copyright © 2011-2022 走看看