乘積最大子串行

2021-10-05 03:32:32 字數 1706 閱讀 9327

given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

example 1:

input: [2,3,-2,4]

output: 6

explanation: [2,3] has the largest product 6.

example 2:

input: [-2,0,-1]

output: 0

explanation: the result cannot be 2, because [-2,-1] is not a subarray.

solution:此題與maximum subarray有些許類似,但此題目涉及到了正負數,因此要考慮到正負數兩種情況。

最優子結構:乘積最大的子串行

遞迴定義最優解的結構:maxsofar = max(maxsofar, maxend),maxend = max(nums[i+1], maxendnums[i+1]),minend = min(nums[i+1], minendnums[i+1]),此次要比求最大子串行和的題目要多乙個狀態值,那就是最小值,乙個負數乘以乙個小的值要大於乘以乙個大的值。

計算最優解:maxsofar

輸入:maxsofar

class

solution

(object):

defmaxproduct

(self, nums)

:"""

:type nums: list[int]

:rtype: int

"""maxsofar = nums[0]

maxend = nums[0]

minend = nums[0]

for i in

range

(len

(nums)-1

):# 乘以乙個負數,大的數更小,小的的數更大,因此要交換一下最大數和最小數

if(nums[i+1]

<0)

: maxend,minend = minend, maxend

minend =

min(nums[i+1]

, minend*nums[i+1]

) maxend =

max(nums[i+1]

, maxend*nums[i+1]

) maxsofar =

max(maxsofar, maxend)

return maxsofar

此前用python解過,今天用c++解答方法為:

class solution 

minnum = min(nums[i],minnum * nums[i]);

maxnum = max(nums[i],maxnum * nums[i]);

result = max(result,maxnum);

}return result;

}};

乘積最大子串行

比如,序列 2,3,2,4 中乘積最大的子串行為 2,3 其乘積為6。方法一 自己一開始寫的方法比較麻煩。通過記錄陣列中元素為0的下標,然後以0為邊界,分割陣列,然後對每個分割後的陣列分別求最大乘積子串行,最後在所有的分割陣列的最大乘積子串行中取最大乘積。class solution int len...

最大子串行乘積

思路 以元素i結尾序列提供的最大正數記做 pos,最小負數記做 nag a n 大於零時 pos n max max value max 若n 1位置存在最小負數,更新 nag n nag n 1 a n a n 小於零時 pos n max max value max 更新 nag n min a...

乘積最大子串行

給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。由於存在負數,那麼最大的數可能變最小的數,最小的...