代码解释:
-
初始化结果数组:
ans
初始化为-1
,因为如果子数组不满足条件,其能量值即为-1
。 -
连续递增子序列长度计数:
cnt
用于记录当前连续递增子序列的长度。 -
遍历数组:使用
enumerate
遍历nums
,同时获取元素的索引i
和值x
。 -
更新连续递增子序列长度:如果当前元素是数组的第一个元素或者当前元素正好比前一个元素大 1,则
cnt
加 1;否则,重置cnt
为 1。 -
判断子数组是否满足条件:如果
cnt
大于等于k
,则说明从当前索引i-k+1
到i
的子数组满足条件,将该子数组的最大元素(当前元素x
)赋值给ans
对应位置。 -
返回结果:遍历结束后,返回结果数组
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 # 返回结果数组
标签:cnt,nums,--,递增,元素,3254,数组,ans,LeetCode From: https://blog.csdn.net/m0_55659480/article/details/143575959思路代码来自灵茶山艾府
https://www.bilibili.com/video/BV1ZH4y1c7GA/?vd_source=ce528e8364236b76ace980f8073c09f9