leetcode 152 乘积最大子序列
【摘要】
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2:
输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
思路:对于必须以第i个数结尾的...

给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
思路:对于必须以第i个数结尾的答案:
如何让乘积最大?
如果是负数,则和之前的乘积最小值相乘(也可能是第i个数本身)
如果是正数,应该和之前的乘积最大值相乘(或者是第i个数本身)
如何让乘积最小?
如果是负数,则和之前的乘积最大值相乘(也可能是第i个数本身)
如果是正数,应该和之前的乘积最小值相乘(或者是第i个数本身)
-
class Solution {
-
public int maxProduct(int[] nums) {
-
int max = Integer.MIN_VALUE, imax = 1, imin = 1;
-
int len=nums.length;
-
for(int i=0; i<len; ++i){
-
if(nums[i] < 0){
-
int tmp = imax;
-
imax = imin;
-
imin = tmp;
-
}
-
imax = Math.max(imax*nums[i], nums[i]);
-
imin = Math.min(imin*nums[i], nums[i]);
-
max = Math.max(max, imax);
-
}
-
return max;
-
}
-
}
文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。
原文链接:fantianzuo.blog.csdn.net/article/details/103298823
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)