LeetCode 153 maximum subarray product

题目要求:

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;

    }
}


update

python解法

还是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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ncst

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值