zoukankan      html  css  js  c++  java
  • leetcode152 乘积最大子数组(Medium)

    题目来源:leetcode152 乘积最大子数组

    题目描述:

    给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

    示例 1:

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

    示例 2:

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

    解题思路:

    不能直接和求和的动态规划一样做法,因为可能存在负负得正的情况,因此记录一个负数的情况,且越小越好,进行动态规划。

    class Solution {
    public:
        int maxProduct(vector<int>& nums) {
            int n=nums.size();
            if(n==0) return 0;
            int ans=nums[0];
            vector<int> dp_min(n,1),dp_max(n,1);
            dp_min[0]=nums[0];
            dp_max[0]=nums[0];
            for(int i=1;i<n;i++){
                dp_min[i]=min(min(nums[i],dp_min[i-1]*nums[i]),dp_max[i-1]*nums[i]);//记录乘积最小值
                dp_max[i]=max(max(nums[i],dp_min[i-1]*nums[i]),dp_max[i-1]*nums[i]);//记录乘积最大值
                ans=max(ans,dp_max[i]);
            }
            return ans;
        }
    };
    
  • 相关阅读:
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    综合练习:词频统计
    免费的论文查重网站
    Hadoop综合大作业
    理解MapReduce
    熟悉常用的HBase操作
    熟悉常用的HDFS操作
    爬虫大作业
    数据结构化与保存
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13360080.html
Copyright © 2011-2022 走看看