首页 > 其他分享 >LeetCode每日一题--3254.长度为k的子数组的能量值I

LeetCode每日一题--3254.长度为k的子数组的能量值I

时间:2024-11-06 17:45:25浏览次数:3  
标签:cnt nums -- 递增 元素 3254 数组 ans LeetCode

代码解释:

  1. 初始化结果数组ans 初始化为 -1,因为如果子数组不满足条件,其能量值即为 -1

  2. 连续递增子序列长度计数cnt 用于记录当前连续递增子序列的长度。

  3. 遍历数组:使用 enumerate 遍历 nums,同时获取元素的索引 i 和值 x

  4. 更新连续递增子序列长度:如果当前元素是数组的第一个元素或者当前元素正好比前一个元素大 1,则 cnt 加 1;否则,重置 cnt 为 1。

  5. 判断子数组是否满足条件:如果 cnt 大于等于 k,则说明从当前索引 i-k+1i 的子数组满足条件,将该子数组的最大元素(当前元素 x)赋值给 ans 对应位置。

  6. 返回结果:遍历结束后,返回结果数组 ans

这种方法的时间复杂度是 O(n),因为它只需要遍历数组一次。空间复杂度是 O(n-k+1),用于存储结果数组。避免了对每个子数组进行单独的最大值检查。

class Solution:
    def resultsArray(self, nums: List[int], k: int) -> List[int]:
        n = len(nums)  # 获取数组 nums 的长度
        ans = [-1] * (n-k+1)  # 初始化结果数组 ans,所有元素都设为 -1
        cnt = 0  # 初始化连续递增子序列的长度计数器

        for i, x in enumerate(nums):  # 遍历 nums 中的每个元素
            # 如果当前元素是数组的第一个元素,或者当前元素正好比前一个元素大 1,则连续递增子序列长度加 1
            if i == 0 or nums[i-1] + 1 == x:
                cnt += 1
            # 如果当前元素不满足连续递增的条件,则重置连续递增子序列长度为 1
            else:
                cnt = 1
            # 如果连续递增子序列的长度达到 k,则将子数组的最大元素(当前元素)赋值给结果数组 ans 对应位置
            if cnt >= k:
                ans[i-k+1] = x  # 注意这里的索引计算,需要减去 k - 1 来得到正确的子数组

        return ans  # 返回结果数组

思路代码来自灵茶山艾府
https://www.bilibili.com/video/BV1ZH4y1c7GA/?vd_source=ce528e8364236b76ace980f8073c09f9

标签:cnt,nums,--,递增,元素,3254,数组,ans,LeetCode
From: https://blog.csdn.net/m0_55659480/article/details/143575959

相关文章

  • 万象网管2004报错提示:taxinject.dll文件丢失,如何修复并启动Server.exe
    在使用万象网管2004这款网吧管理软件时,部分用户可能会遇到启动Server.exe时系统提示“taxinject.dll文件丢失”的错误。这一错误通常会导致Server.exe无法正常启动,从而影响网吧管理系统的正常运行。本文将详细介绍如何修复这一错误,并成功启动Server.exe。一、了解taxinject.d......
  • mysql5安全审计
    安装插件插件需要严格与数据库版本适配,不然安装过程中会出现问题解压插件cd插件所在路径unzipaudit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip#查看mysql默认插件目录mysql>SHOWGLOBALVARIABLESLIKE'plugin_dir';#将插件移动到mysql默认插件目录下cp......
  • 上古卷轴msvcp120.dll文件丢失怎么办?上古卷轴游戏msvcp120.dll缺失问题的高效解决方案
    对于热爱《上古卷轴》系列游戏的玩家来说,遇到游戏因msvcp120.dll文件丢失而无法运行的情况无疑是一个令人沮丧的问题。这个动态链接库文件(DLL)是MicrosoftVisualC++RedistributablePackage中的一个关键组件,对于游戏的正常运行至关重要。一旦这个文件缺失,游戏可能无法加载必......
  • Flutter 项目一键打包多个渠道包的实现
    前言在移动开发中,通常需要对应用进行不同渠道的打包,以满足多平台推广需求。本文将介绍如何通过一键打包脚本,实现Flutter项目多渠道打包,并生成指定的渠道APK文件。效果图:实现步骤1.定义渠道索引和名称首先在代码中定义一个渠道索引和渠道名称的数组,以便在打包时区......
  • 代码分析——构造huffman树(本质建立小根堆)
    (2023)n个不等长的非空表,n-1次两两合并合成一表,设计一种方案,使总比较次数T最小并求出T的值。如abc合并,a和b比较x次,ab和c比较y次,则T=x+y审题容易想到每次比较最小的两个表,再递增比较后面的,即使用哈夫曼树(HuffmanTree)的思想。哈夫曼树是一种最优二叉树,用于数据压缩和......
  • DearPyGui环境配置
    DearPyGui是一个基于Python的图形用户界面(GUI)工具包,它以简单易用而著称。这个库利用GPU加速渲染和高效的C/C++底层代码,确保了出色的性能和稳定性。DearPyGui支持异步函数,能够绘制大量数据点而不影响帧率,还内置了一个节点编辑器和实时开发调试工具。它适用于Windows、Linux和MacOS......
  • PROFINET中的冗余系统
    两个相互独立的冗余分类系统冗余SR介质冗余MRP这是两个功能完全独立且不冲突的概念,是两个完全无关的冗余功能;系统冗余系统冗余SR是指IO设备通过PROFINET与两个容错的CPU(HCPU)之间进行通讯连接。该通讯连接可以通过任何可拓扑的互连来建立,并不局限于环网拓扑,对交换机也......
  • [USACO21DEC] Tickets P 题解
    [USACO21DEC]TicketsP首先我们思考暴力的\(O(n^2)\)怎么做。显然比起每次以\(i\)为起点跑\(n\)遍最短路,建反图后分别以\(1\)和\(n\)为起点跑两遍最短路是更加经济的方式。然后你可能会以为\(\text{dis}(1,i)+\text{dis}(n,i)\)就是答案了,之后你就会发现连样例都过......
  • 23设计模式详解
    参考博客https://baijiahao.baidu.com/s?id=1758410771062793648&wfr=spider&for=pc设计模式(Designpattern)"""对软件开发中【普遍存在(反复出现)的问题】,而提出的【解决方案】。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要和重复出现的设计通过设计......
  • word转pdf
    fromwin32comimportclient#转换doc为pdfdefdoc2pdf(fn):word=client.Dispatch("Word.Application")#打开word应用程序#forfileinfiles:doc=word.Documents.Open(fn)#打开word文件doc.SaveAs("{}.pdf".format(fn[:-4]),17)......