题目

  给定一个double类型的数组arr,其中的元素可正、可负、可0,返回子数组累乘的最大乘积。例如,arr = [-2.5, 4, 0, 3, 0.5, 8, -1],子数组[3, 0.5, 8]累乘可以获得最大的乘积12,所以返回12.

基本思路

  本题可以做到时间复杂度O(N)、空间复杂度O(1).

  大致思路是,遍历一遍数组,求出以每一个元素结尾的子数组的最大累乘积。如何快速的求出以 i 位置结尾的子数组的最大累积呢?假设以arr[i-1]结尾的最小乘积是min,最大乘积是max。那么,以arr[i]结尾的最大累乘积只可能来自以下三种情况:

可能是max * arr[i]

可能是min * arr[i],因为数组中可能包含负数,负负得正

可能是arr[i],因为以arr[i-1]结尾的最大乘积可能小于1

这三种可能的值中最大的那个就作为以 i 位置结尾的最大累乘积,最小的作为最小累乘积,继续遍历下一个位置

def maxProduct(L):if L == None or len(L) == 0:return 0max_,min_,res = L[0],L[0],L[0]maxEnd,minEnd = 0,0for i in range(1,len(L)):maxEnd = max_ * L[i]minEnd = min_ * L[i]max_ = max(max(maxEnd,max_),L[i])min_ = min(min(minEnd,min_),L[i])res = max(max_,res)return res

数组中子数组的最大累乘积相关推荐

  1. php数组修改键值,php数组中子数组如何修改键值

    php数组中子数组修改键值的方法:使用函数[array_slice()]在数组中根据条件取出一段值,并返回,语法为[array_slice(array,offset,length,preserve)] ...

  2. java 最大子数组_求一个数组中子数组的最大和算法(Java实现)

    前几天在微信订阅号"待字闺中"中看到的一篇文章<小技巧求一个数组中子数组的最大和>,提供下Java的实现,并且在对题目做下小修改,本来打算直接在微信里直接回复,但是发现 ...

  3. php索引数组相等,php二维数组中子数组的某一键相等,其余键值求和

    需要处理的数组 Array ( [0] => Array ( [uid] => 1 [price] => 85.00 [earnings] => 40.00 ) [1] =&g ...

  4. 求解数组中子数组连续元素的之和的最大值

    #include <cstdlib> #include <iostream> #include <algorithm> using namespace std;// ...

  5. 数组中子数组求最大和

    练习题: 一个有正有负的数组,求这个数组的子数组中各个元素和最大的那个和. 分析思路:设置一个最大值来记录 1 #include<stdio.h> 2 #include<stdlib ...

  6. 数组中子数组运算常见写法

    子数组最大值 for(int j=0;j<size;j++){int value=INT_MIN;for(int i=j;i>=0;i--){ value=std::max(value,A ...

  7. php数组添加数组_PHP数组

    一.数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值  array_keys($arr);获得数组的键名  array_flip($arr);数组中的值与键名互换 ...

  8. JavaScript的数组基础数组进阶单元知识点

    目录 一.数组基础 二.数组的基本操作 三.数组对象 四.数组展开运算符 五.数组配合剩余参数 六.数组解构 七.数组对象解构 八.forEach遍历数组 九.filter 筛选数组 十.Array数 ...

  9. activex传字符串数组_JS中的数组以及数组的#x27;增#x27;,#x27;删#x27;,#x27;改#x27;,#x27;查#x27;

    JS中的数组简介 JS中一共有七种数据类型:number,string,null,undefined,Boolean,symbol以及Object,其中数组属于object,js数组不是典型的数组,因 ...

最新文章

  1. IROS 2021 | 激光视觉融合新思路?Lidar强度图+VPR
  2. 网络推广外包——企业委托网络推广外包公司提高网站流量和访问量
  3. iPhone手机获取uuid 安装测试app
  4. 框架 路由地址_Django框架的使用
  5. mysql客户端查询_MySQL数据库之利用mysql客户端查询UCSC数据库
  6. 走火入魔的 C/C++ 如何通过编译器预定义的宏值来区分 target OS 是 Windows 还是 Linux...
  7. 鼎微方案导航一体机刷机包_SMB方案之星 | 海康威视人脸门禁一体机产品应用方案集锦...
  8. Linux jdk 环境变量配置
  9. sap系统ftp服务器下文件,sap ftp服务器
  10. opencv Camshift
  11. 将AD原理图文件和PCB文件转换为KiCad格式的方法
  12. 手绘线条一直画不直_板绘线条不流畅怎么办?线稿就得这样练!
  13. 以太网转DMX模块核心模块 支持ArtNet sACN DMX RDM
  14. c花体复制_可复制花体字大全?
  15. MFI认证——什么是苹果MFI认证
  16. NVIDIA GeForce GTX 1050 Ti性能如何
  17. 今天安利几个好用的软件给你
  18. 2021-05-12 MongoDB面试题 什么情况下需要用到MongoDB的分片
  19. 什么是似然函数?是条件概率吗?
  20. flink catalog 及dialect、数据转存分析

热门文章

  1. 获取height固定折叠元素真实高度方法
  2. 数据库连接客户端使用(db2,oracle,mysql)
  3. asp.net MVC发布iis无法加载css,js和图片
  4. STM32向量表详细分析
  5. wsl ubuntu update显示err: 404 Not Found解决方法
  6. PAT甲级1122 Hamiltonian Cycle:[C++题解] 图论、模拟
  7. Linux信号 四 异步等待信号与同步等待信号接口
  8. php后台无法接受文件,ios afnetworking2.x上传图片 服务端php无法接受文件问题
  9. php listview,ListView Item多布局的实现
  10. crf linux使用教程,Linux下CRF++的使用