一个数组中连续的最大积
时间: 2024-05-27 20:14:27 浏览: 14
题目描述:
给定一个整数数组,找出其中连续的最大乘积。
输入:[2,3,-2,4]
输出:6
解释:子数组 [2,3] 有最大乘积 6。
输入:[-2,0,-1]
输出:0
解释:结果不能为负数,最大乘积为 0。
思路:
本题与“连续子数组的最大和”类似,只不过需要考虑负数的情况。具体思路如下:
- 遍历数组,同时记录当前子数组的最大值和最小值(因为负数乘以负数为正数,所以需要记录最小值)以及全局最大值;
- 当遇到负数时,最大值和最小值需要交换。
代码实现:
class Solution {
public int maxProduct(int[] nums) {
int max = Integer.MIN_VALUE;
int imax = 1, imin = 1;
for (int num : nums) {
if (num < 0) {
int tmp = imax;
imax = imin;
imin = tmp;
}
imax = Math.max(imax * num, num);
imin = Math.min(imin * num, num);
max = Math.max(max, imax);
}
return max;
}
}
相关问题
数组中连续子数组的最大值
数组中连续子数组的最大值可以通过动态规划来解决。我们可以定义一个数组 dp,其中 dp[i] 表示以第 i 个元素结尾的连续子数组的最大值。
初始状态下,dp[0] 等于数组的第一个元素。然后,我们从第二个元素开始遍历数组,对于每个元素 nums[i],如果 dp[i-1] 大于 0,则说明前面的连续子数组和对当前元素有增益效果,dp[i] = dp[i-1] + nums[i];如果 dp[i-1] 小于等于 0,则说明前面的连续子数组和对当前元素没有增益效果,dp[i] = nums[i]。
遍历完整个数组后,dp 数组中的最大值即为连续子数组的最大值。
下面是一段示例代码:
```python
def max_subarray_sum(nums):
if len(nums) == 0:
return 0
dp = [0] * len(nums)
dp[0] = nums[0]
max_sum = dp[0]
for i in range(1, len(nums)):
if dp[i-1] > 0:
dp[i] = dp[i-1] + nums[i]
else:
dp[i] = nums[i]
max_sum = max(max_sum, dp[i])
return max_sum
```
这样,调用 max_subarray_sum 函数,并传入一个数组作为参数,即可得到该数组中连续子数组的最大值。
如何输出一个数组中的最大值
您可以使用以下代码来输出一个数组中的最大值:
```python
arr = [3, 5, 1, 9, 2]
max_val = max(arr)
print(max_val)
```
在这个例子中,我们定义了一个包含多个整数的数组 `arr`,然后使用 `max()` 函数来获取数组中的最大值。最终,我们将这个最大值 `max_val` 输出到屏幕上。