Python算法题集_滑动窗口最大值

本文为Python算法题集之一的代码示例

题目239:滑动窗口最大值

说明:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       31 [3  -1  -3] 5  3  6  7       31  3 [-1  -3  5] 3  6  7       51  3  -1 [-3  5  3] 6  7       51  3  -1  -3 [5  3  6] 7       61  3  -1  -3  5 [3  6  7]      7

示例 2:

输入:nums = [1], k = 1
输出:[1]

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • 1 <= k <= nums.length

- 问题分析

  1. 本题为求连续窗口中的最大子元素
  2. 主要的计算为2个,1数组窗口遍历,2求窗口内的最大值
  3. 基本的遍历为双层循环,从第一个元素开始,每个数组窗口计算一次最大值,所以基本的时间算法复杂度为(On2)

- 优化思路

  1. 优化的思路,计算一次最大值是没有什么余地的,最重要是是否能将双层循环变成单层循环,将依次计算变成一遍

  • CheckFuncPerf是我写的函数用时和内存占用模块,地址在这里:测量函数运行用时、内存占用的代码单元CheckFuncPerf.py以及使用方法
  • 测试的超长字符串文件是官网的,已上传到CSDN,地址在这里:LeetCode:滑动窗口最大值测试用例数组,长度为10W(估计是1月31日过审)

  1. 标准求解,双层循环,超时失败

    import CheckFuncPerf as cfpdef maxSlidingWindow_base(nums, k):result = []for iIdx in range(len(nums)-k+1):iMax = nums[iIdx]for jIdx in range(k):iMax = max(iMax, nums[iIdx+jIdx])result.append(iMax)return resulttestcase_big = open(r'testcase/hot11_big.txt', mode='r', encoding='utf-8').read().replace('[', '').replace(']', '')
    testcase_big = testcase_big.split(',')
    nums = [int(x) for x in testcase_big]
    k = 1000
    result = cfp.getTimeMemoryStr(maxSlidingWindow_base, nums, k)
    print(result['msg'], '执行结果 = {}'.format(len(result['result'])))# 运行结果
    函数 maxSlidingWindow_base 的运行时间为 22652.95 ms;内存使用量为 780.00 KB 执行结果 = 99001
    
  2. 优化版【队列法优化最大值序列计算】,马马虎虎,超越68%在这里插入图片描述

    def maxSlidingWindow_ext1(nums, k):if len(nums)==1:return numsif k==1:return numsresult = []list_check = []for iIdx in range(len(nums)):ileft = iIdx - k + 1while(list_check and nums[iIdx] >= nums[list_check[-1]]):del list_check[-1]while(list_check and list_check[0] < ileft):del list_check[0]list_check.append(iIdx)if ileft >= 0:result.append(nums[list_check[0]])return resulttestcase_big = open(r'testcase/hot11_big.txt', mode='r', encoding='utf-8').read().replace('[', '').replace(']', '')
    testcase_big = testcase_big.split(',')
    nums = [int(x) for x in testcase_big]
    k = 1000
    result = cfp.getTimeMemoryStr(maxSlidingWindow_ext1, nums, k)
    print(result['msg'], '执行结果 = {}'.format(len(result['result'])))# 运行结果
    函数 maxSlidingWindow_ext1 的运行时间为 40.01 ms;内存使用量为 780.00 KB 执行结果 = 99001
    

    一日练,一日功,一日不练十日空

    may the odds be ever in your favor ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442889.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis -- 背景知识

目录 特性 为啥Redis快? 应用场景 Redis不能做什么&#xff1f; Redis是在内存中存储数据的一个中间件&#xff0c;用作为数据库&#xff0c;也可以用作为缓存&#xff0c;在分布式中有很高的威望。 特性 In-memory data structures&#xff1a;在内存中存储数据key-val…

Linux Centos stream9 mdadm

RAID(Redundant Array of Independent Disk独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出&#xff0c;最初是为了组合小的廉价磁盘来代替大的昂贵磁盘&#xff0c;同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁…

牛客——二分(差分数组前缀和)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 我们刚刚学了二分查找——所谓二分查找就是在一堆有序数里找某个符合要求的数。在学完二分查找之后如果让你玩猜数游戏&#xff08;裁判选定一个目标数字&#xff0c;你说一个数裁判…

鸿蒙开发之app快速备案流程

App备案快速入门知识 1、 准备材料 1、阿里云APP &#xff08;用于人脸识别认证&#xff09; 2、身份证原件&#xff08;用于拍照上传身份证照片&#xff0c;阿里云APP不支持本地上传照片&#xff0c;只能拍照&#xff09; 3、一个主办单位负责人联系电话&#xff08;该号码必…

带大家做一个,易上手的家常香干炒韭菜

两瓣蒜 一块生姜 生姜切小片 和 四个左右干辣椒一起装起来 蒜切小片 装起来 准备一把韭菜 韭菜 切成段 准备两个香干豆腐 香干豆腐切片备用 起锅烧油 热后 下入生姜 干辣椒炒香 然后下入香干翻炒 翻炒均匀后 下入 半勺老抽 一勺生抽 适量蚝油 翻炒均匀后 下入蒜片 …

在 WLC上配置WPA2-Enterprise WLAN

实验大纲 第1部分&#xff1a;创建一个新的WLAN 第1步&#xff1a;创建一个新的VLAN接口 第2步&#xff1a;配置WLC让它使用RADIUS服务器 第3步&#xff1a;创建一个新的WLAN 第4步&#xff1a;配置WLAN安全策略 第2部分&#xff1a;配置DHCP范围和SNMP 第1步&#xff1…

MySQL十部曲之一:MySQL概述及手册说明

文章目录 数据库、数据库管理系统以及SQL之间的关系关系型数据库与非关系型数据库MySQL程序系统变量系统状态变量SQL模式MySQL数据目录手册语法约定 数据库、数据库管理系统以及SQL之间的关系 名称说明数据库&#xff08;Database&#xff09;即存储数据的仓库&#xff0c;其本…

python学习21

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

Java项目:基于SSM框架实现的家纺用品销售管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm814基于SSM框架实现的家纺用品销售管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试…

HarmonyOS应用开发者基础认证考试答案

HarmonyOS应用开发者基础认证考试答案 一、判断题 1.Ability是系统调度应用的最小单元&#xff0c;是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(True) 2.所有使用Component修饰的自定义组件都支持onPageShow&#xff0c;onBackPress和onPageHide…

聚合支付,实现支付宝微信扫二维码直接跳转支付

具体要实现的功能&#xff1a;手机支付宝或微信扫描同一个二维码&#xff0c;跳转各自的支付 微信使用&#xff1a;jsapi支付 支付宝&#xff1a;wappay 上篇已写了如何实现内网穿透调试就不多叙述 1.判断客户端类型&#xff0c;从request的中将user-agent拉取下来&#xf…

【音视频】http-flv直播分发协议的延迟效果

一、前言 直播电商和新型直播社交已成为风口&#xff0c;市场上主流APP有60%以上都会有直播的内容。以前是以文本和图片为主&#xff0c;当前视频和直播这类流式传输已经成为网络传输中的主要流量。 本文主要针对http-flv这个直播分发协议&#xff0c;测试在不同云产商的延迟…