leetcode 152 乘积最大子序列

举报
兔老大 发表于 2021/04/23 00:40:44 2021/04/23
【摘要】 给定一个整数数组 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个数本身)


  
  1. class Solution {
  2. public int maxProduct(int[] nums) {
  3. int max = Integer.MIN_VALUE, imax = 1, imin = 1;
  4. int len=nums.length;
  5. for(int i=0; i<len; ++i){
  6. if(nums[i] < 0){
  7. int tmp = imax;
  8. imax = imin;
  9. imin = tmp;
  10. }
  11. imax = Math.max(imax*nums[i], nums[i]);
  12. imin = Math.min(imin*nums[i], nums[i]);
  13. max = Math.max(max, imax);
  14. }
  15. return max;
  16. }
  17. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/103298823

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。