首页 > 编程语言 >Leetcode刷题Python之3254.长度为K的子数组的能量值I

Leetcode刷题Python之3254.长度为K的子数组的能量值I

时间:2024-11-06 18:16:08浏览次数:4  
标签:nums Python 最大值 示例 3254 数组 长度 能量 Leetcode

提示:关于数组子问题的挑战,涉及能量值的计算。

文章目录


一、问题描述

给定一个长度为 n 的整数数组 nums 和一个正整数 k,我们需要计算每个长度为 k 的子数组的能量值。能量值的定义如下:

如果子数组的所有元素都是依次连续且上升的,那么该子数组的能量值就是其最大元素。否则,能量值为 -1。

输入格式
nums: 一个包含 n 个整数的列表。
k: 一个正整数,表示每个子数组的长度。

输出格式
返回一个长度为 n - k + 1 的整数数组,包含每个子数组的能量值。


示例

示例一:

输入:nums = [1,2,3,4,3,2,5], k = 3
输出:[3, 4, -1, -1, -1]
解释:
子数组 [1, 2, 3] 的最大值为 3。
子数组 [2, 3, 4] 的最大值为 4。
其他子数组不满足连续上升的条件,因此它们的能量值为 -1。

示例二:

输入:nums = [2, 2, 2, 2, 2], k = 4
输出:[-1, -1]
解释:
所有子数组都不满足条件,因此结果为 -1。

示例三:

输入:nums = [3, 2, 3, 2, 3, 2], k = 2
输出:[-1, 3, -1, 3, -1]
解释:
只有子数组 [2, 3] 满足条件。

二、解题思路

为了找出每个长度为 k 的子数组的能量值,我们可以采取以下步骤:
1.遍历数组,提取从当前索引开始的所有长度为 k 的子数组。
2.计算当前子数组的最大值。
3.检查子数组是否满足“依次连续且上升”的条件:
(1)如果满足,则把最大值加入结果数组。
(2)如果不满足,则结果数组中加入 -1。

三、代码实现

1.引入库

代码如下:

class Solution(object):
    def resultsArray(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: List[int]
        """
        n = len(nums)
        results = []  # 存储每个子数组的能量值

        # 遍历所有长度为 k 的子数组
        for i in range(n - k + 1):
            # 提取当前的子数组
            sub_array = nums[i:i + k]
            max_value = max(sub_array)  # 计算当前子数组的最大值

            # 检查子数组是否满足严格递增且连续的条件
            is_consecutive_and_increasing = True
            for j in range(k - 1):
                if sub_array[j] + 1 != sub_array[j + 1]:  # 当前元素 + 1 应该等于下一个元素
                    is_consecutive_and_increasing = False
                    break
            
            # 如果符合条件,将最大值添加到结果,否则添加 -1
            if is_consecutive_and_increasing:
                results.append(max_value)
            else:
                results.append(-1)

        return results

# 测试示例
solution = Solution()
print(solution.resultsArray([1, 2, 3, 4, 3, 2, 5], 3))  # 输出 [3, 4, -1, -1, -1]
print(solution.resultsArray([2, 2, 2, 2, 2], 4))         # 输出 [-1, -1]
print(solution.resultsArray([3, 2, 3, 2, 3, 2], 2))     # 输出 [-1, 3, -1, 3, -1]

2.代码解释

1.输入和初始化:
使用 results 列表来存储每个子数组的能量值。通过 n = len(nums) 来获取数组长度。

2.遍历子数组:
使用 for 循环从 0 到 n - k 遍历所有可能的子数组。每次迭代通过切片提取当前子数组。

3.最大值计算:
调用 max() 函数来获取当前子数组中的最大元素。

4.条件检查:
使用嵌套循环检查子数组是否满足连续且上升的条件。
如果条件满足,将最大值加入到结果列表中;如果不满足,加入 -1。


总结

时间复杂度
由于需要遍历所有子数组并计算最大值,时间复杂度为 O(n * k),其中 n 是数组长度,k 是子数组的长度。

空间复杂度
除了输入数组和结果数组,我们使用的额外空间是常量,因此空间复杂度为 O(1)。

在这里插入图片描述

标签:nums,Python,最大值,示例,3254,数组,长度,能量,Leetcode
From: https://blog.csdn.net/qq_53086905/article/details/143576700

相关文章

  • c++ 嵌入 python问题
     在嵌入式Python环境中,确保你的C++应用程序能够加载静态编译的Python解释器,需要设置Python解释器的搜索路径。以下是实现这一目标的步骤:1.设置环境变量你可以通过设置环境变量 PYTHONHOME 来指定Python解释器的根目录。这个环境变量告诉Python解释器去哪里查找......
  • 【毕业设计】基于深度学习的水族馆生物识别 人工智能 深度学习 目标检测 Python
    一、背景意义    随着水族馆的普及和水生生态保护意识的提高,生物识别技术在水族馆管理、教育和研究中的重要性日益凸显。传统的生物识别方法往往依赖于人工观察和专家判断,效率低、准确性差且容易受到主观因素影响。水族馆中涉及的生物种类繁多,包括鱼类、虾类、海洋哺乳......
  • 2529.正整数和负整数的最大计数(leetcode)
    https://leetcode.cn/problems/maximum-count-of-positive-integer-and-negative-integerclassSolution{publicintmaximumCount(int[]nums){//思路:由于数组非递减,考虑logn实现//因此可以有二段性可以二分//即寻找正数和负数的分界点t......
  • LeetCode每日一题--3254.长度为k的子数组的能量值I
    代码解释:初始化结果数组:ans初始化为-1,因为如果子数组不满足条件,其能量值即为-1。连续递增子序列长度计数:cnt用于记录当前连续递增子序列的长度。遍历数组:使用enumerate遍历nums,同时获取元素的索引i和值x。更新连续递增子序列长度:如果当前元素是数组的第一......
  • python项目打包指南
    #Python是解释型语言,我们写的Flask或Django项目如果部署,#源码可能会泄露,因此我们可以把项目打包成exe,来保护源码#需要用到工具-pyinstaller:把python项目打包成不同平台的可执行文件-nsis:NSIS(NullsoftScriptableInstallSystem)是一个开源的Windows系统下安装程序制作......
  • 【LeetCode】移除链表中等于设定值的元素、反转链表
    主页:HABUO......
  • LeetCode202 快乐数
    快乐数题目链接:LeetCode202描述编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为1,也可能是无限循环但始终变不到1。如果这个过程结果为1,那么这个数就是快乐......
  • 第十三届蓝桥杯Python 大学 B 组 数位排序
    数位排序问题描述小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。例如,2022排在409前面,因为2022的数位之和是6,小于409的数位之和13。又如,......
  • 蓝桥杯【第13届省赛】Python B组 C题
    C:纸张尺寸【问题描述】    在ISO国际标准中定义了A0纸张的大小为1189mm×841mm,将A0纸沿长边对折后为A1纸,大小为841mm×594mm,在对折的过程中长度直接取下整(实际裁剪时可能有损耗)。将A1纸沿长边对折后为A2纸,依此类推。     输入纸张的名称......
  • 1.python的基本语法和简单数据类型
    1.1语法特点1.1.1注释语句单行注释在所需注释内容前加'#'号#我是一个注释多行注释'''(单引号/或双引号)注释代码''''''我是代码我是代码我是代码我是代码'''1.2.1缩进先看代码if<我是条件1>:<我是代码><我是代码>else:<我是......