LeetCode算法笔记-Day63
152. Maximum Product Subarray
Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.   
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | Example:
 Input: [2,3,-2,4]
 Output: 6
 Explanation: [2,3] has the largest product 6.
 
 Input: [-2,0,-1]
 Output: 0
 Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
 
 
 | 
方法一:动态规划

| 12
 3
 4
 5
 6
 7
 
 | 1.令imax为当前最大值,则当前最大值为 imax = max(imax * nums, nums)
 2.由于存在负数,那么会导致最大的变最小的,最小的变最大的。因此还需要维护当前最小值imin,imin = min(imin * nums, nums)
 
 3.当负数出现时则imax与imin进行交换再进行下一步计算
 
 时间复杂度:O(n)
 
 | 
Answer:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | 
 
 
 var maxProduct = function(nums) {
 let res = -1*Infinity,
 curr_max = 1,
 curr_min = 1;
 
 for(let i=0;i<nums.length;i++){
 if(nums[i]<0){
 [curr_max,curr_min] = [curr_min,curr_max];
 }
 curr_max = Math.max(curr_max * nums[i],nums[i]);
 curr_min = Math.min(curr_min * nums[i],nums[i]);
 res = Math.max(res,curr_max);
 }
 
 return res;
 };
 
 |