leecode---dfs,array,局部和全局---152. Maximum Product Subarray

 
题意
给一个数组,求出数组中元素连乘的最大结果
 
分析
因为可能存在负数,所以要记录最大值和最小值,因为最小值可能是负数,乘以负数之后就变成正数了。
所以不断刷新最大值,最小值和全局最大值。
blog.csdn.net/whuwangyi/article/details/39577455
代码
class Solution {
    public int maxProduct(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        if (nums.length == 1) {
            return nums[0];
        }
        
        //维护全局最大值和局部最大最小值,因为可能一做乘法就从最小变成最大了
        int globalMax = nums[0];
        int localMax = nums[0];
        int localMin = nums[0];
        
        for (int i = 1; i < nums.length; i++) {
            int tempMin = Math.min(nums[i], Math.min(localMax * nums[i], localMin * nums[i]));
            int tempMax = Math.max(nums[i], Math.max(localMax * nums[i], localMin * nums[i]));
            localMax = tempMax;
            localMin = tempMin;
            globalMax = Math.max(localMax,globalMax);
        }
        
        return globalMax;
    }
}
posted @ 2018-08-14 20:39  buptyuhanwen  阅读(92)  评论(0编辑  收藏  举报