152. Maximum Product Subarray

来源:互联网 发布:java微信自定义菜单 编辑:程序博客网 时间:2024/04/26 06:08

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.

记录当前最大, 最小值. 因为遇到负数时, 与最小值的product可能成为最大值.




最大值怎么来:正值X正值  负值X负值  大数本身


1.当前最小值怎么来的:本身是一个负数(数组的第一个数),当前的最大值(一个正数)X一个负数,当前最小值(负数)X一个正数

2.当前最大值怎么来的:本身是一个正数(数组的第一个数),当前的最大值(一个正数)X一个正数,当前最小值(负数)X一个负数

3.总的最大值怎么来的    不断比较当前最大值与整体最大值的大小 

public class Solution {    public int maxProduct(int[] nums) {      if(nums==null||nums.length==0) return 0;      if(nums.length==1) return nums[0];      int a=nums[0],b=nums[0],max=nums[0],min=nums[0],global=nums[0];      for(int i=1;i<nums.length;i++){             a = max*nums[i];               b = min*nums[i];                            max = Math.max(nums[i], Math.max(a, b));              min = Math.min(nums[i], Math.min(a, b));             global = Math.max(max, global);        }      return global;    }}


0 0