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.

    Subscribe to see which companies asked this question

     
    一道medium的题目,我自己的思考过程复杂化了,首先我先想到的是可能出现的情况,如果负数为偶数的话,就是正数了,那么返回自身就好;如果负数为奇数,要看最后一个负数前面的子串和后面的子串的product谁大。还有0的情况,数组里有几个0,就会将数组分成几个部分,于是觉得这道题复杂极了。对于medium的题,我每次先自己怂了。==
     
    后来看了一个别人的解法。思路非常清晰:首先获得最大的product就三种情况;curMax保存当前最大子串的乘积,curMin保存当前最小子串的乘积。
    第一种:如果nums[i]>0,那么max=curMax*nums[i];
    第二种:如果nums[i]<0,那么max=curMin*nums[i];
    第三种:max=nums[i]
    这样思路就比较简单也比较清楚。而且时间复杂非常低。之后我也附上“暴力破解”。
    class Solution {
    public:
    
        int maxProduct(vector<int>& nums) {
            int temp=0;
            int len=nums.size();
            if(len<=0) return 0;
            if(len==1) return nums[0];
            int curMax=nums[0];
            int curMin=nums[0];
            int result=nums[0];
            for(int i=1;i<len;i++){
                temp=curMin*nums[i];
                curMin=min(nums[i],min(temp,curMax*nums[i]));
                curMax=max(nums[i],max(temp,curMax*nums[i]));
                result=max(result,curMax);
            }
            return result;
        }
    };

    暴力破解:

    // 思路:用两个指针来指向字数组的头尾
    int maxProduct(int A[], int n)
    {
        assert(n > 0);
        int subArrayProduct = -32768; 
        
        for (int i = 0; i != n; ++ i) {
            int nTempProduct = 1;
            for (int j = i; j != n; ++ j) {
                if (j == i)
                    nTempProduct = A[i];
                else
                    nTempProduct *= A[j];
                if (nTempProduct >= subArrayProduct)
                     subArrayProduct = nTempProduct;
            }
        }
        return subArrayProduct;
    }

     感觉有些题目要从结果来分析,就像这道题,而有的题目要从条件来分析就像以前做的有些题目。心得,哈哈。

  • 相关阅读:
    IconRes提供免费高质量的Material风格android官方图标库
    android中的所谓观察者模式
    Android总结篇——Intent机制详解及示例总结
    SpringMVC注解@initbinder解决类型转换问题
    ubuntu16.04上安装tomcat7
    ImportError: No module named corsheaders
    linux 网卡
    工控机安装Ubuntu14.04
    python2安装django
    Ubuntu14.04 terminal添加右键
  • 原文地址:https://www.cnblogs.com/LUO77/p/4950008.html
Copyright © 2011-2022 走看看