Leetcode--152. 乘积最大子数组(java)
給你一個整數數組 nums?,請你找出數組中乘積最大的連續子數組(該子數組中至少包含一個數字),并返回該子數組所對應的乘積。
?
示例 1:
輸入: [2,3,-2,4]
輸出: 6
解釋:?子數組 [2,3] 有最大乘積 6。
示例 2:
輸入: [-2,0,-1]
輸出: 0
解釋:?結果不能為 2, 因為 [-2,-1] 不是子數組。
?
思路:每次如果nums[i]是負數,交換最大最小值
imax = max(imax * nums[i], nums[i])
?
?
代碼:
class?Solution?{
????public?int?maxProduct(int[]?nums)?{
????????int?max?=?-2147483647>>2;
????????//多一個符號最大變最小,最小變最大?2?3?-2?-2?2??min:-12??max:1?max:24??minx:-12
????????int?tmax=1,tmin=1;
????????for(int?i=0;i<nums.length;i++){
????????????if(nums[i]<0){
????????????????int?t?=?tmax;
????????????????tmax?=?tmin;
????????????????tmin?=?t;
????????????}
????????????tmax?=?Math.max(nums[i],tmax*nums[i]);
????????????tmin?=?Math.min(nums[i],tmin*nums[i]);
????????????max?=?Math.max(max,tmax);
????????}
????????return?max;
????}
}
總結
以上是生活随笔為你收集整理的Leetcode--152. 乘积最大子数组(java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【剑指offer】面试题10- I:斐波
- 下一篇: 7-2 哈夫曼编码 (30 分)