zoukankan      html  css  js  c++  java
  • [LeetCode]Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest product.

    For example, given the array [2,3,-2,4],
    the contiguous subarray [2,3] has the largest product = 6.

    这道题是找出数组中的一个子序列。要求这个子序列中数的乘积是全部子序列中最大的。

    假设不考虑效率与优化问题,能够直接将全部子序列的组合列举出来。分别求它们的积,取最大值。例如以下:

    int maxProduct(int A[], int n) {
            int i = 0, j = 0,k=0;
            int ans = 0;
            int product = 0;
            for (i = n; i > 0; i--){
                for (j = 0; j <= n-i; j++){
                    for (k = j; k < i; k++){
                        product += A[k];
                    }
                    if (product>ans){
                        ans = product;
                    }
                    product = 0;
                }
            }
            return ans;
        }

    可是这种效率是非常低的。换个思路能够想到,这道题就是一维动态规划中的“局部最优与全局最优”。所以须要维护两个变量,当前位置连续乘积的最大值curMax和最小值curMin。

    最大值与最小值由下面三种情况能够得到:上一次的curMax*A[i],上一次的curMin*A[i],A[i]本身。例如以下:

    int maxProduct(int A[], int n) {
            int ans = A[0];
            int curMin = A[0];
            int curMax = A[0];
            int cur = 1;
            for (int i = 1; i < n; i++){
                cur = curMax;
                curMax = max(max(A[i],A[i]*curMax),A[i]*curMin);
                curMin = min(min(A[i], A[i] * cur), A[i] * curMin);
                ans = max(ans, curMax);
            }
            return ans;
        }

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Explain执行计划
    SQL优化(SQL + 索引)
    SQL(含索引)
    分组聚合 merger
    服务分组 group
    多注册中心 registry
    多协议 protocol
    常用协议 —— webservice://
    常用协议 —— http://
    最强AngularJS资源合集
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4689705.html
Copyright © 2011-2022 走看看