leetcode152
class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.empty())
return ;
if(nums.size() == )
return nums[]; int maxAll = nums[]; //global maximum
int maxLast = nums[]; //maximum including last element
int maxCur; //maximum including current element
int minLast = nums[]; //minimum including current element
int minCur; //minimum including last element
for(int i = ; i < nums.size(); i ++)
{
maxCur = max(nums[i], max(maxLast*nums[i], minLast*nums[i]));
minCur = min(nums[i], min(maxLast*nums[i], minLast*nums[i]));
maxLast = maxCur;
minLast = minCur;
maxAll = max(maxAll, maxCur);
}
return maxAll;
}
};
因为nums可能包含负数,因此之前最小的乘积*当前值,有可能成为最大值;而之前最大的乘积*当前值,有可能成为最小值。
因此,每次计算的时候,把目前的最大乘积和最小乘积都保存下来,用于下一次计算。
补充一个python的实现:
class Solution:
def maxProduct(self, nums: 'List[int]') -> 'int':
n = len(nums)
if n == :
return
elif n == :
return nums[]
maxAll,preMax,preMin = nums[],nums[],nums[]
curMax,curMin = nums[],nums[]
for i in range(,n):
curMax = max(nums[i],max(preMax*nums[i],preMin*nums[i]))
curMin = min(nums[i],min(preMax*nums[i],preMin*nums[i]))
preMax,preMin = curMax,curMin
maxAll = max(maxAll,curMax)
return maxAll
leetcode152的更多相关文章
- [Swift]LeetCode152. 乘积最大子序列 | Maximum Product Subarray
Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...
- LeetCode152:Maximum Product Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- 【leetcode-152】 乘积最大子序列
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6.示例 2: 输 ...
- Leetcode152. Maximum Product Subarray乘积的最大子序列
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. 示例 2 ...
- leetcode152. 乘积最大子序列
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数).示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6.示例 2:输入: ...
- LeetCode 152
Maximum Product Subarray Find the contiguous subarray within an array (containing at least one numbe ...
随机推荐
- wc语法
统计当前目录下的所有文件行数: wc -l * 当前目录以及子目录的所有文件行数: find . * | xargs wc -l 可以把*改成所要匹配的文件,例如Java文件,*.java这样就只统 ...
- AlwaysOn环境下的压缩Log文件方法
Step1.将DB脱离可用性组 Step2.修改为简单恢复模式>收缩文件>修改回完整恢复模式 -- Truncate the log by changing the database re ...
- 读txt文件乱码
/** * 读入TXT文件 */public static List<String> readFile(String pathName) {// 绝对路径或相对路径都可以,写入文件时演示相 ...
- ArcGIS 按多边形区域统计栅格影像的一些信息
在使用ArcGIS对栅格影像进行分析时,难免要进行一些统计类的分析.如统计框选区域的像素的个数,面积.均值等内容. 下面给出使用“Spatial Analyst Tools -- > Zonal ...
- 如何在 Windows 中设置 /3GB 启动开关
备注: 只有在下列操作系统中才支持 /3GB 开关: Windows 2000 Advanced Server Windows 2000 Datacenter Server Windows Serve ...
- Windows 局域网ping获取设备IP
/********************************************************************** * Windows 局域网ping获取设备IP * 说明 ...
- s21day06 python笔记
s21day06 python笔记 一.昨日内容回顾及补充 回顾 补充 列表独有功能 reverse:反转 v = [1,2,3,4,5] v.reverse() #[5,4,3,2,1] sort: ...
- 《DSP using MATLAB》Problem 7.10
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- 1,python 的基本数据类型
Python3 中有6个标准的数据类型:Number(数字);字符串(String);列表(list);元组(Tuple);字典:(Dict);集合(Sets) Number: 数字 int整形 fl ...
- CH5702 Count The Repetitions
题意 5702 Count The Repetitions 0x50「动态规划」例题 描述 定义 conn(s,n) 为 n 个字符串 s 首尾相接形成的字符串,例如: conn("abc& ...