zoukankan      html  css  js  c++  java
  • LeetCode 152. 乘积最大子序列(Maximum Product Subarray)

    题目描述

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

    示例 1:

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

    示例 2:

    输入: [-2,0,-1]
    输出: 0
    解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

    解题思路

    利用动态规划思想,因为两个负数相乘会变成正数,所以对于每个位置要记录当前子序列的乘积最大值和最小值,这样状态转移方程为:

    maxNum = max(maxNums[i - 1] * nums[i], minNums[i - 1] * nums[i], nums[i])

    minNum = min(maxNums[i - 1] * nums[i], minNums[i - 1] * nums[i], nums[i])

    代码

     1 class Solution {
     2 public:
     3     int maxProduct(vector<int>& nums) {
     4         vector<int> maxNums(nums), minNums(nums);
     5         int res = nums[0];
     6         for(int i = 1; i < nums.size(); i++){
     7             maxNums[i] = max(maxNums[i - 1] * nums[i] < minNums[i - 1] * nums[i] ? minNums[i - 1] * nums[i] : maxNums[i - 1] * nums[i], nums[i]);
     8             minNums[i] = min(maxNums[i - 1] * nums[i] > minNums[i - 1] * nums[i] ? minNums[i - 1] * nums[i] : maxNums[i - 1] * nums[i], nums[i]);
     9             if(res < maxNums[i])
    10                 res = maxNums[i];
    11         }
    12         return res;
    13     }
    14 };
  • 相关阅读:
    group by;having;order by
    oracle官方文档
    oracle正则表达式函数和正则表达式简介
    oracle系统函数
    oracle系统表
    windows搭建ftp服务器
    开机自动挂载
    linux修改设置ip地址
    My First Web Server
    为什么要写博客?
  • 原文地址:https://www.cnblogs.com/wmx24/p/9406204.html
Copyright © 2011-2022 走看看