leetcode_Maximum Product Subarray

来源:互联网 发布:mysql停用索引 编辑:程序博客网 时间:2024/06/05 20:34

描述:

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;}




0 0
原创粉丝点击