欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Leetcode刷题Python之3255.长度为k的子数组的能量值II

Leetcode刷题Python之3255.长度为k的子数组的能量值II

2025/9/15 8:14:15 来源:https://blog.csdn.net/qq_53086905/article/details/143592141  浏览:    关键词:Leetcode刷题Python之3255.长度为k的子数组的能量值II

提示:可以使用滑动窗口技术来解决。

文章目录

  • 一、题目描述
    • 示例
  • 二、代码实现
    • 1.运行代码
    • 2.代码解释
  • 总结


一、题目描述

给定一个长度为 n 的整数数组 nums 和一个正整数 k。对于一个数组,它的能量值定义如下:
如果数组中的所有元素都是依次连续且上升的,那么这个数组的能量值就是最大的那个元素;否则,能量值为 -1。我们的任务是求出 nums 中所有长度为 k 的子数组的能量值,并返回一个长度为 n - k + 1 的整数数组 results,其中 results[i] 表示子数组 nums[i…(i + k - 1)] 的能量值。

示例

示例一:

输入:nums = [1,2,3,4,3,2,5],k = 3
输出:[3,4,-1,-1,-1]
解释:
nums 中总共有 5 个长度为 3 的子数组:
[1, 2, 3] 中最大元素为 3。因为元素是连续且上升的(1、2、3)。
[2, 3, 4] 中最大元素为 4。同样元素是连续且上升的(2、3、4)。
[3, 4, 3] 中元素不是连续的(4 之后应该是 5 才连续)。
[4, 3, 2] 中元素不是上升的。
[3, 2, 5] 中元素不是连续的。

示例二:

输入:nums = [2,2,2,2,2],k = 4
输出:[-1,-1]
这里所有长度为 4 的子数组元素都相等,不满足连续且上升的条件。

示例三:

输入:nums = [3,2,3,2,3,2],k = 2
输出:[-1,3,-1,3,-1]

二、代码实现

1.运行代码

代码如下:

class Solution:def resultsArray(self, nums, k):n = len(nums)cnt = 0ans = [-1] * (n - k + 1)for i in range(n):# 判断当前数字与前一个数字是否连续cnt = 1 if i == 0 or nums[i] - nums[i - 1]!= 1 else cnt + 1# 如果连续的长度达到 k,则将该子数组的最大值存入结果列表if cnt >= k:ans[i - k + 1] = nums[i]return ans

2.代码解释

1.初始化部分
首先,获取输入数组 nums 的长度 n。这一步是为了后续在循环中方便地遍历数组和确定结果数组的长度。
初始化一个变量 cnt 为 0。cnt 的作用是记录当前连续上升元素的个数。
创建一个长度为 n - k + 1 的列表 ans,并初始化为 -1。这个列表将用于存储最终的结果,即每个长度为 k 的子数组的能量值。

2.循环遍历部分
通过 for 循环遍历整个输入数组 nums,索引为 i。
在每次循环中,更新 cnt 的值。这里使用了一个简洁的条件表达式。如果当前是数组的第一个元素(i == 0)或者当前元素与前一个元素的差值不等于 1(nums[i] - nums[i - 1]!= 1),那么将 cnt 重置为 1,表示新的连续序列开始。否则,将 cnt 的值加 1,表示当前连续上升序列的长度增加。
接着,检查 cnt 是否大于等于 k。如果是,说明当前位置开始往前的长度为 k 的子数组是连续且上升的。此时,将 ans[i - k + 1] 的值设置为 nums[i]。这里的索引计算 i - k + 1 是巧妙地对应了结果数组 ans 中应该存储当前子数组能量值的位置。

3.返回结果
最后,返回存储了所有长度为 k 的子数组能量值的结果列表 ans。


总结

这种实现方式通过一次遍历数组就完成了对所有子数组能量值的计算,时间复杂度为 O(n),其中 n 是输入数组的长度。相比一些暴力解法,提高了效率,比较高效简洁。

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词