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

    class Solution {
    public:
        int maxProduct(int A[], int n) {
            if (A == NULL || n < 1) {
                return INT_MIN;
            }
            int res = INT_MIN;
            int tr = 1;
            for (int i=0; i<n; i++) {
                tr = tr * A[i];
                if (tr > res) {
                    res = tr;
                }
                if (tr == 0) {
                    tr = 1;
                }
            }
            tr = 1;
            for (int i=n-1; i>=0; i--) {
                tr = tr * A[i];
                if (tr > res) {
                    res = tr;
                }
                if (tr == 0) {
                    tr = 1;
                }
            }
            return res;
        }
    };

     更叼的方法,不过速度上没有明显提升

    class Solution {
    public:
        int maxProduct(int A[], int n) {
            // store the result that is the max we have found so far
            int r = A[0];
        
            // imax/imin stores the max/min product of
            // subarray that ends with the current number A[i]
            for (int i = 1, imax = r, imin = r; i < n; i++) {
                // multiplied by a negative makes big number smaller, small number bigger
                // so we redefine the extremums by swapping them
                if (A[i] < 0)
                    swap(imax, imin);
        
                // max/min product for the current number is either the current number itself
                // or the max/min by the previous number times the current one
                imax = max(A[i], imax * A[i]);
                imin = min(A[i], imin * A[i]);
        
                // the newly computed max value is a candidate for our global result
                r = max(r, imax);
            }
            return r;
        }
    };

     第二轮:

    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.

    还是中间的方法更好一些

    class Solution {
    public:
        int maxProduct(int A[], int n) {
            int maxv = A[0];
            int minv = A[0];
            int maxt = A[0];
            for (int i=1; i<n; i++) {
                int mxv = maxv;
                int miv = minv;
                maxv = max(max(mxv * A[i], miv * A[i]), A[i]);
                minv = min(min(miv * A[i], mxv * A[i]), A[i]);
                maxt = max(maxv, maxt);
            }
            return maxt;
        }
    };
  • 相关阅读:
    第194场周赛
    刷leetcode的心得
    91. Decode Ways
    23. Merge k Sorted Lists
    19. Remove Nth Node From End of List
    21. Merge Two Sorted Lists
    222. Count Complete Tree Nodes
    958. Check Completeness of a Binary Tree
    课程学习总结报告
    结合中断上下文切换和进程上下文切换分析Linux内核一般执行过程
  • 原文地址:https://www.cnblogs.com/lailailai/p/4176446.html
Copyright © 2011-2022 走看看