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.

思路:

1.一种思路是将数组分为被数字0分割的子数组,然后统计负数出现的次数,如果 是偶数,直接取子数组的乘积,如果是奇数,取去掉前面第一个奇数出现之前的 部分或去掉最后一个奇数及其后面数组部分后剩余部分的乘积即可,然后取maxProduct为字数组乘积最大的一段。程序的控制流程很麻烦。

2.每次取部分数组乘积的最大值或最小值,然后跟num[i]做乘法运算,再取最大值或最小值即可,取最大值理所当然,取最小值是因为最小值的绝对值 可能大于最大值,碰到负数就变最大值了。

代码:

public int maxProduct(int[] nums)
	{
		if (nums == null || nums.length == 0)
			return 0;
		int maxProduct=nums[0];
		int minProduct=nums[0];
		int maxSofar=nums[0];
		int tempMaxProduct,tempMinProduct;
		int numMax,numMin;
		for(int i=1;i<nums.length;i++)
		{
			numMax=maxProduct*nums[i];
			numMin=minProduct*nums[i];
			tempMaxProduct=Math.max(Math.max(numMax,numMin ), nums[i]);
			tempMinProduct=Math.min(Math.min(numMax, numMin), nums[i]);
			maxSofar=Math.max(tempMaxProduct, maxSofar);
			maxProduct=tempMaxProduct;
			minProduct=tempMinProduct;
		}
		return maxSofar;
	}




你可能感兴趣的:(maximum,product,Suba)