当前位置: 首页 > 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])

http://www.xdnf.cn/news/505297.html

相关文章:

  • 从AI系统到伦理平台:技术治理的开放转向
  • docker部署第一个Go项目
  • 语音转文字并进行中英文翻译
  • 【JavaScript】 js 基础知识强化复习
  • 2025系统架构师---选择题知识点(押题)
  • JavaScript基础-作用域链
  • vue3: amap using typescript
  • 【2025 技术指南】如何创建和配置国际版 Apple ID
  • DeepSeek 赋能社会科学:解锁研究新范式
  • 第三十四节:特征检测与描述-SIFT/SURF 特征 (专利算法)
  • JavaScript基础-对象的相关概念
  • NestJS——日志、NestJS-logger、pino、winston、全局异常过滤器
  • ORACLE数据库实例报错ORA-00470: LGWR process terminated with error宕机问题分析报告
  • JavaScript 的编译与执行原理
  • IT运维的365天--026 视频下载相关
  • 常见平方数和立方数的计算
  • 简单网络交换、路由-华三RRPP以太环网
  • 电商项目-品牌管理微服务开发
  • OpenHarmony外设驱动使用 (二),Camera
  • 【大模型面试每日一题】Day 21:对比Chain-of-Thought(CoT)与Self-Consistency在复杂推理任务中的优劣
  • 线程同步学习
  • 8天Python从入门到精通【itheima】-11~13
  • SpringBootAdmin:全方位监控与管理SpringBoot应用
  • nt!MiInitializePfn函数分析之nt!MiPfPutPagesInTransition函数的关键一步
  • Golang 范型
  • 编程日志5.10
  • QLoRA: Efficient Finetuning of Quantized LLMs
  • acwing5579 增加模数
  • 深入了解 VPC 端点类型 – 网关与接口
  • Stacking(堆叠):集成学习中的“超级英雄团队”