首页 > 代码库 > LeetCode -- 最大连续乘积子序列
LeetCode -- 最大连续乘积子序列
问题描写叙述: 给定数组,找出连续乘积最大值的子序列。
比如 0,-1,-3。-2。则最大连续乘积为6= (-3) * (-2)
实现思路
此题与最大连续和的子序列问题相似,也可通过找到递推公式然后用DP来解。
关键在于求公式的过程要考虑到元素可能为负的情况。如果元素都为正数的话,DP公式为:
dp[i] = max(a[i],dp[i-1]*a[i]) ,乘或不乘,取最大的那个
可元素可能为负数。因此能够使用min和max分别存当前最大值和最小值,如果当前元素为负数的话,当前最小值就成了最大值。这样一来。dp公式为:
max = Max(Max(max * a[i], min * a[i]), a[i]) 。先从max * a[i]和min * a[i]找出最大值,在与a[i]进行比較
min = Min(Min(max * a[i], min * a[i]), a[i]) ,同上。仅仅是取的是最小值
最后的max即为所求
public class Solution { public int MaxProduct(int[] nums) { var len = nums.Length; if(len == 0) { return 0; } var max = nums[0]; var min = nums[0]; var result = nums[0]; for(var i = 1;i < len; i++){ var tmpMax = Math.Max(Math.Max(max * nums[i] , min * nums[i]), nums[i]); var tmpMin = Math.Min(Math.Min(max * nums[i] , min * nums[i]), nums[i]); max = tmpMax; min = tmpMin; result = Math.Max(result , max); } return result; } }
LeetCode -- 最大连续乘积子序列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。