LeetCode C 乘積最大子陣列

2021-10-07 09:21:54 字數 1247 閱讀 7637

給你乙個整數陣列 nums ,請你找出陣列中乘積最大的連續子陣列(該子陣列中至少包含乙個數字),並返回該子陣列所對應的乘積。

示例 1:

輸入: [2,3,-2,4]

輸出: 6

解釋: 子陣列 [2,3] 有最大乘積 6。

示例 2:

輸入: [-2,0,-1]

輸出: 0

解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。

思路:

方法一:

對每個元素求出最大連續乘積。

將所有元素的最大連續乘積進行比較,求出最大值。

方法二:動態規劃

最小值乘乙個負數,則可能成為最大值。

最大值乘乙個正數,則可能成為最大值。

從第乙個元素至第i個元素的子陣列最大連續乘積,可能為第i-1個元素的子陣列最大值乘以第i個元素(正數),第i-1個元素的子陣列最小值乘以第i個元素(負數),第i個元素。即

max_sub_arr[i]=max(max_sub_arr[i-1]*nums[i], min_sub_arr[i-1]*nums[i], nums[i])

同理,子陣列最小連續乘積,可能為第i-1個元素的子陣列最大值乘以第i個元素(負數),第i-1個元素的子陣列最小值乘以第i個元素(正數),第i個元素。

min_sub_arr[i]=min(max_sub_arr[i-1]*nums[i], min_sub_arr[i-1]*nums[i], nums[i])

**:

方法一:

class

solution

cur_max=cur_max>max_multi?cur_max:max_multi;

//所有元素的最大連續乘積

}return cur_max;}}

;

方法二:動態規劃

//方法二:動態規劃

intmaxproduct

(vector<

int>

& nums)

return cur_max;

}

結果:

[1] xiaoju233:乘積最大子陣列 【動態規劃】

最大子串乘積

最大子串乘積 輸入n個數,求它的最大的連續子串乘積。例 輸入 1 2 3 7 0 2 3 輸出 實現 include int max subsegment int arr int len 最大子段乘積函式 else if arr j 0 else return max int main main p...

乘積最大子串行

比如,序列 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...