美文网首页
最大乘积子序列问题

最大乘积子序列问题

作者: Jiafu | 来源:发表于2017-09-30 09:00 被阅读0次

给一个浮点数序列,取最大乘积子序列的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积子序列为3,0.5,8。

解法:
动态规划求解
假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max[i]来表示以a[i]结尾的最大连续子序列的乘积值,用Min[i]表示以a[i]结尾的最小的连续子序列的乘积值,那么状态转移方程为:
Max[i]=max{a[i], Max[i-1]a[i], Min[i-1]a[i]};
Min[i]=min{a[i], Max[i-1]a[i], Min[i-1]a[i]};
初始状态为Max[1]=Min[1]=a[1]。代码如下:

public class MaxContinuousProduct {
 
 
    // 获取数组a中,最大连续子序列的乘积
    public static double getMaxContinuousProduct(double[] a) {
        if (a.length == 0) {
            throw new IllegalArgumentException("Array a can not be empty.");
        }
 
        // min[i]表示以a[i]结尾的子序列的最小乘积
        double[] min = new double[a.length];
        // max[i]表示以a[i]结尾的子序列的最大乘积
        double[] max = new double[a.length];
        max[0] = a[0];
        min[0] = a[0];
        double maxProduct = max[0];
        for (int i = 1; i < a.length; i++) {
            max[i] = Math.max(Math.max(a[i], max[i - 1] * a[i]), min[i - 1] * a[i]);
            min[i] = Math.min(Math.min(a[i], max[i - 1] * a[i]), min[i - 1] * a[i]);
            if (max[i] > maxProduct) maxProduct = max[i];
        }
        return maxProduct;
    }
 
    public static void main(String[] args) {
        double a[] = {-2.5, 4, 0, 3, 0.5, 8, -1};
        System.out.println(getMaxContinuousProduct(a));
    }
}

相关文章

  • LeetCode 152. 乘积最大子序列(Maximum Pr

    152. 乘积最大子序列 乘积最大子序列给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至...

  • 最大乘积子序列问题

    给一个浮点数序列,取最大乘积子序列的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积子序列为3,...

  • LintCode乘积最大子序列

    找出一个序列中乘积最大的连续子序列(至少包含一个数)。 样例 比如, 序列 [2,3,-2,4] 中乘积最大的子序...

  • 算法问题清单

    最大子序列和最长公共子序列最长公共子串大整数相乘/除/加数组最大乘积

  • 乘积最大子序列

    LintCode题目地址找出一个序列中乘积最大的连续子序列(至少包含一个数)。

  • 乘积最大子序列

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

  • LeetCode 152. Maximum Product Su

    动态规划问题 记 n_max [i] 为以 nums[i] 为结尾的子序列的最大乘积记 n_min [i] 为以 ...

  • 动态规划4:乘积最大子序列

    给定一个数组,找到其连续子序列的最大乘积。 例如: 分析: 尝试定义状态: f(n)为以arr[n]结尾的子序列的...

  • 乘积最大子序列

    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [...

  • Leetcode 152. 乘积最大子序列

    题目描述 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: ...

网友评论

      本文标题:最大乘积子序列问题

      本文链接:https://www.haomeiwen.com/subject/svmiextx.html