当前位置: 首页 > news >正文

Python-92:最大乘积区间问题

问题描述

小R手上有一个长度为 n 的数组 (n > 0),数组中的元素分别来自集合 [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]。小R想从这个数组中选取一段连续的区间,得到可能的最大乘积。

你需要帮助小R找到最大乘积的区间,并输出这个区间的起始位置 x 和结束位置 y (x ≤ y)。如果存在多个区间乘积相同的情况,优先选择 x 更小的区间;如果 x 相同,选择 y 更小的区间。

注意:数组的起始位置为 1,结束位置为 n

代码

from math import log

def solution(n: int, arr: list[int]) -> list[int]:

    # Edit your code here

    """

    寻找最大乘积区间

    Args:

        n: 数组长度

        arr: 输入数组

    Returns:

        返回最大乘积区间的起始和结束位置 [x, y]

    """

    # 结果数组,保存起始位置x和结束位置y

    result = [1, 1]

    # 初始化最大对数和

    max_log_sum = float('-inf') if arr[0] == 0 else log(arr[0])

   

    # 遍历所有可能的起始位置

    for i in range(n):

        # 如果起始位置是0,单独处理

        if arr[i] == 0:

            if max_log_sum == float('-inf') and (result[0] > i + 1):

                result[0] = i + 1

                result[1] = i + 1

            continue

           

        # 当前区间的对数和

        current_log_sum = 0

        # 遍历从i开始的所有可能的结束位置

        for j in range(i, n):

            # 如果当前数是0,结束当前内层循环

            if arr[j] == 0:

                break

           

            # 累加对数

            current_log_sum += log(arr[j])

           

            # 更新最大值和对应的区间

            if (current_log_sum > max_log_sum or

                (abs(current_log_sum - max_log_sum) < 1e-10 and i + 1 < result[0]) or

                (abs(current_log_sum - max_log_sum) < 1e-10 and i + 1 == result[0] and j + 1 < result[1])):

                max_log_sum = current_log_sum

                result[0] = i + 1

                result[1] = j + 1

   

    return result


 

if __name__ == "__main__":

    # Add your test cases here

    print(solution(5, [1, 2, 4, 0, 8]) == [1, 3])

    print(solution(7, [1, 2, 4, 8, 0, 256, 0]) == [6, 6])

相关文章:

  • 飞帆控件 post or get it when it has get
  • 摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类颜色QColor)
  • Canva 推出自有应用生成器以与 Bolt 和 Lovable 竞争
  • 第8讲、Multi-Head Attention 的核心机制与实现细节
  • 【电路笔记 STM32】 STM32CubeProgrammer 下载 安装 使用
  • NY309NY318美光科技颗粒NY319NY320
  • AI大模型(一)embedding模型的基础使用
  • Spark缓存-persist和cache方法
  • 前端-HTML元素
  • Raft 协议:分布式一致性算法的核心思想
  • 电动调节 V 型球阀:工业流体控制的全能解决方案-耀圣
  • HTTP与HTTPS协议的核心区别
  • 通过多线程获取VENC的H264码流数据
  • 刷leetcodehot100返航版--二叉树
  • 计算机视觉与深度学习 | Python实现EMD-SSA-VMD-LSTM时间序列预测(完整源码和数据)
  • Day12-苍穹外卖(完结篇)
  • ctfshow——web入门254~258
  • 98. 验证二叉搜索树
  • 如何优化关键词长度:2025年SEO实用指南
  • 广药集团原董事长李楚源被“双开”:去年8月被查,曾多次发表争议言论
  • 新时代,新方志:2025上海地方志论坛暨理论研讨会举办
  • 病重老人取钱在银行门口去世,家属:已协商一致
  • 李强:把做强国内大循环作为推动经济行稳致远的战略之举
  • 透视社会组织创新实践中的花开岭现象:与乡村发展的融合共进
  • 山东市监局回应“盒马一批次‘无抗’鸡蛋抽检不合格后复检合格”:系生产商自行送检