系列文章目录
前言
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
描述
输入一个长度为n的整型数组nums,数组中的一个或连续多个整数组成一个子数组。求所有子数组的乘积的最大值。
1.子数组是连续的,且最小长度为1,最大长度为n
2.长度为1的子数组,乘积视为其本身,比如[4]的乘积为4
3.该题的数据保证最大的乘积不会超过int的范围,即不超过2的32次方−1
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* @param nums int整型vector
* @return int整型
*/
int maxProduct(vector<int>& nums) {
vector<int> pos(nums); // 存储以nums[i] 结尾的最大乘积
vector<int> neg(nums); // 存储以 nums[i] 结尾的最小乘积
int result=nums[0];
for(int i=1;i<nums.size();i++){
pos[i]=max(nums[i],max(nums[i]*pos[i-1],nums[i]*neg[i-1]));
neg[i]=min(nums[i],min(nums[i]*pos[i-1],nums[i]*neg[i-1]));
result=max(result,pos[i]);
}
return result;
}
};