数组中子数组的最大累乘积
题目
给定一个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
数组中子数组的最大累乘积相关推荐
- php数组修改键值,php数组中子数组如何修改键值
php数组中子数组修改键值的方法:使用函数[array_slice()]在数组中根据条件取出一段值,并返回,语法为[array_slice(array,offset,length,preserve)] ...
- java 最大子数组_求一个数组中子数组的最大和算法(Java实现)
前几天在微信订阅号"待字闺中"中看到的一篇文章<小技巧求一个数组中子数组的最大和>,提供下Java的实现,并且在对题目做下小修改,本来打算直接在微信里直接回复,但是发现 ...
- php索引数组相等,php二维数组中子数组的某一键相等,其余键值求和
需要处理的数组 Array ( [0] => Array ( [uid] => 1 [price] => 85.00 [earnings] => 40.00 ) [1] =&g ...
- 求解数组中子数组连续元素的之和的最大值
#include <cstdlib> #include <iostream> #include <algorithm> using namespace std;// ...
- 数组中子数组求最大和
练习题: 一个有正有负的数组,求这个数组的子数组中各个元素和最大的那个和. 分析思路:设置一个最大值来记录 1 #include<stdio.h> 2 #include<stdlib ...
- 数组中子数组运算常见写法
子数组最大值 for(int j=0;j<size;j++){int value=INT_MIN;for(int i=j;i>=0;i--){ value=std::max(value,A ...
- php数组添加数组_PHP数组
一.数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值 array_keys($arr);获得数组的键名 array_flip($arr);数组中的值与键名互换 ...
- JavaScript的数组基础数组进阶单元知识点
目录 一.数组基础 二.数组的基本操作 三.数组对象 四.数组展开运算符 五.数组配合剩余参数 六.数组解构 七.数组对象解构 八.forEach遍历数组 九.filter 筛选数组 十.Array数 ...
- activex传字符串数组_JS中的数组以及数组的#x27;增#x27;,#x27;删#x27;,#x27;改#x27;,#x27;查#x27;
JS中的数组简介 JS中一共有七种数据类型:number,string,null,undefined,Boolean,symbol以及Object,其中数组属于object,js数组不是典型的数组,因 ...
最新文章
- IROS 2021 | 激光视觉融合新思路?Lidar强度图+VPR
- 网络推广外包——企业委托网络推广外包公司提高网站流量和访问量
- iPhone手机获取uuid 安装测试app
- 框架 路由地址_Django框架的使用
- mysql客户端查询_MySQL数据库之利用mysql客户端查询UCSC数据库
- 走火入魔的 C/C++ 如何通过编译器预定义的宏值来区分 target OS 是 Windows 还是 Linux...
- 鼎微方案导航一体机刷机包_SMB方案之星 | 海康威视人脸门禁一体机产品应用方案集锦...
- Linux jdk 环境变量配置
- sap系统ftp服务器下文件,sap ftp服务器
- opencv Camshift
- 将AD原理图文件和PCB文件转换为KiCad格式的方法
- 手绘线条一直画不直_板绘线条不流畅怎么办?线稿就得这样练!
- 以太网转DMX模块核心模块 支持ArtNet sACN DMX RDM
- c花体复制_可复制花体字大全?
- MFI认证——什么是苹果MFI认证
- NVIDIA GeForce GTX 1050 Ti性能如何
- 今天安利几个好用的软件给你
- 2021-05-12 MongoDB面试题 什么情况下需要用到MongoDB的分片
- 什么是似然函数?是条件概率吗?
- flink catalog 及dialect、数据转存分析
热门文章
- 获取height固定折叠元素真实高度方法
- 数据库连接客户端使用(db2,oracle,mysql)
- asp.net MVC发布iis无法加载css,js和图片
- STM32向量表详细分析
- wsl ubuntu update显示err: 404 Not Found解决方法
- PAT甲级1122 Hamiltonian Cycle:[C++题解] 图论、模拟
- Linux信号 四 异步等待信号与同步等待信号接口
- php后台无法接受文件,ios afnetworking2.x上传图片 服务端php无法接受文件问题
- php listview,ListView Item多布局的实现
- crf linux使用教程,Linux下CRF++的使用