乘积最大子数组【php版】

47 篇文章 1 订阅

在这里插入图片描述

	/**
	 * 动态规划:因为乘积的特性,需要维护一个最大值与最小值,记max表示以上一个元素结尾的
	 * 子数组乘积的最大值, min表示以上一个元素结尾的子数组乘积的最小值。
	 * 当前元素为负值时,其乘以最小值min后的结果反而比较大,所以在乘之前先交换max与min的值
	 * @param Integer[] $nums
	 * @return Integer
	 */
	function maxProduct($nums) {
		$max = 1;
		$min = 1;
		$ans = PHP_INT_MIN;
		foreach ($nums as $num) {
			// 当前元素为负值时,其乘以最小值min后的结果反而比较大,所以在乘之前先交换max与min的值
			if ($num < 0) {
				$temp = $max;
				$max = $min;
				$min = $temp;
			}

			$max = max($max*$num, $num);
			$min = min($min*$num, $num);
			$ans = max($max, $ans);
		}
		return $ans;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值