zoukankan      html  css  js  c++  java
  • LeetCode 152. 乘积最大子序列

    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。

    示例 1:

    输入: [2,3,-2,4]
    输出: 6
    解释: 子数组 [2,3] 有最大乘积 6。
    

    示例 2:

    输入: [-2,0,-1]
    输出: 0
    解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
    正常人做法:
     1 class Solution {
     2 public:
     3     int maxProduct(vector<int>& nums) {
     4         int n = nums.size();
     5         long long mindp = nums[0];
     6         long long maxdp = nums[0];
     7         long long  res = nums[0];
     8         for(int i = 1;i < nums.size();++i)
     9         {
    10             long long x = nums[i];
    11             long long max_dp = max(max(mindp*x,maxdp*x),x);
    12             long long min_dp = min(min(mindp*x,maxdp*x),x);
    13             maxdp = max_dp;
    14             mindp = min_dp;
    15             res = max(res,maxdp);
    16         }
    17         return res;
    18     }
    19 };

    讨论里某一神仙做法:

    1 class Solution:
    2     def maxProduct(self, A):
    3         B = A[::-1]
    4         for i in range(1, len(A)):
    5             A[i] *= A[i - 1] or 1
    6             B[i] *= B[i - 1] or 1
    7         return max(max(A),max(B)) 
  • 相关阅读:
    取最小未用的账号
    Oracle 同义词
    RMAN备份报 RMAN-06059 错误
    Oracle11g memory_target
    基础记录
    uboot启动流程
    android有关生命周期探讨
    can协议
    java虚拟机
    内存管理机制
  • 原文地址:https://www.cnblogs.com/Jawen/p/10820638.html
Copyright © 2011-2022 走看看