当前位置: 首页 > news >正文

leetcode 239. 滑动窗口最大值

暴力解法是一种简单直接的方法,虽然效率较低,但可以帮助你更好地理解问题的逻辑。以下是使用暴力解法解决“滑动窗口最大值”问题的 C++ 实现。

暴力解法的思路

  1. 遍历每个滑动窗口:

    • 使用一个外层循环,从数组的起始位置开始,逐步移动窗口的起始位置。
    • 每次移动一个位置,形成一个新的滑动窗口。
  2. 找到当前窗口的最大值:

    • 使用一个内层循环,遍历当前窗口内的所有元素,找到最大值。
  3. 存储最大值:

    • 将当前窗口的最大值存储到结果数组中。
  4. 终止条件:

    • 当窗口的右边界超出数组范围时,停止遍历。

C++ 代码实现

#include <vector>
#include <algorithm>
using namespace std;class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> result;int n = nums.size();// 遍历每个滑动窗口for (int i = 0; i <= n - k; ++i) {int maxNum = INT_MIN; // 初始化当前窗口的最大值为最小整数// 遍历当前窗口内的所有元素for (int j = i; j < i + k; ++j) {maxNum = max(maxNum, nums[j]); // 更新最大值}// 将当前窗口的最大值加入结果数组result.push_back(maxNum);}return result;}
};

代码解释

  1. 外层循环:

    • for (int i = 0; i <= n - k; ++i):遍历每个可能的滑动窗口的起始位置 i
    • i 的范围是从 0n - k,确保窗口的右边界不超过数组的大小。
  2. 内层循环:

    • for (int j = i; j < i + k; ++j):遍历当前窗口内的所有元素。
    • maxNum = max(maxNum, nums[j]):更新当前窗口的最大值。
  3. 存储最大值:

    • result.push_back(maxNum):将当前窗口的最大值加入结果数组。
  4. 返回结果:

    • 最终返回结果数组 result

时间复杂度

  • 外层循环: 遍历每个可能的滑动窗口,时间复杂度是 O(n - k + 1)
  • 内层循环: 每个窗口内遍历 k 个元素,时间复杂度是 O(k)
  • 总时间复杂度: O((n - k + 1) * k),即 O(n * k)

空间复杂度

  • 结果数组: 存储每个窗口的最大值,空间复杂度是 O(n - k + 1)

示例运行

假设输入数组是 [1,3,-1,-3,5,3,6,7],窗口大小是 k = 3

  • 第一个窗口 [1,3,-1],最大值是 3
  • 第二个窗口 [3,-1,-3],最大值是 3
  • 第三个窗口 [-1,-3,5],最大值是 5
  • 第四个窗口 [-3,5,3],最大值是 5
  • 第五个窗口 [5,3,6],最大值是 6
  • 第六个窗口 [3,6,7],最大值是 7

最终结果是 [3,3,5,5,6,7]

总结

暴力解法虽然简单易懂,但效率较低,适合小规模数据。对于大规模数据,建议使用双端队列的优化方法,时间复杂度可以优化到 O(n)。如果你对暴力解法还有任何疑问,或者想了解更多优化方法,随时问我哦!

相关文章:

  • gcc/g++常用参数
  • linux-yum-异常
  • 【Docker】docker compose和docker swarm区别
  • UDP的单播组播与广播
  • Vue框架
  • vue2 切换主题色以及单页面好使方法
  • 【HCIA】聚合VLAN
  • QT+Visual Studio 配置开发环境教程
  • Java—异常体系
  • 如何开发专业小模型
  • windows触摸板快捷指南
  • 杭电多校10 : 1007 小塔的魔法树
  • 分糖果--思维+while判断
  • CSS- 4.2 相对定位(position: relative)
  • 前端基础之CSS
  • 【001】RenPy打包安卓apk 流程源码级别分析
  • (面试)TCP、UDP协议
  • 手写tomcat:基本功能实现(4)
  • 轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal
  • Git 版本控制系统入门指南
  • 蔡建忠已任昆山市副市长、市公安局局长
  • 蒲慕明院士:未来数十年不是AI取代人,而是会用AI的人取代不会用的
  • 海外考古大家访谈|冈村秀典:礼制的形成与早期中国
  • 工人日报:应对“职场肥胖”,健康与减重同受关注
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 广西:坚决拥护党中央对蓝天立进行审查调查的决定