您的位置:首页 > 其它

LeetCode 153 maximum subarray product

2016-12-08 17:56 441 查看
题目要求: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
.该题目如果只是用简单的多次for循环的方式,会出现 time limited因此因该使用动态规划算法(DP)选取的时候,当该点与后面的以为是相乘的时候,如果小于后面的数字就应该将后面的数字更新为新的起点.但是新的起点并不意味着原来的乘积也要跟着更新,只用新的乘积超过原有的乘积的时候才能将新的乘积结果也更新的现在的结果同时应当注意负数相乘的结果,因此在计算的时候也应当在保存一个最大值的时候也进行保存一个最小值.
public class Solution {
public int maxSubArray(int[] nums) {

//使用动态规划的方式进行解题
//同时应当注意起始点的选取
int maxTemp = nums[0];
int minTemp = nums[0];
int productTemp = nums[0];

for(int i = 1; i < nums.length; i++) {
int value1 = nums[i] * maxTemp;
int value2 = nums[i] * minTemp;
maxTemp = Math.max(Math.max(value1, value2), nums[i]);
minTemp = Math.min(Math.min(value1, value2), nums[i]);
productTemp = Math.max(productTemp, maxTemp);
}
return productTemp;

}
}
updatepython解法还是python写起来简单class Solution(object):def maxProduct(self, nums):""":type nums: List[int]:rtype: int"""max_value = min_value = product = nums[0]for n in nums[1:]:max_value, min_value = max(max(n * max_value, n * min_value), n), min(min(n * max_value, n * min_value), n)product = max(max_value, product)return product
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: