152. Maximum Product Subarray
阿新 • • 發佈:2018-10-13
求一個 最小 最小乘積 div i++ public pro return bubuko
一、題目
1、審題
2、分析
求一個整數數組中的連續子串的最大乘積。
二、解答
1、思路:
①、遍歷數組,采用三個變量進行記錄。
maxCurProduct:包含當前下標的數組元素時的最大乘積。
minCurProduct: 包含當前下標的數組元素時的最小乘積。
product: 當前為止的最大乘積。
②、因為數組中可能存在負數,而 負數乘以越小的數乘積越大。故當 arr[i] < 0 時,交換 maxCurProduct 與 minCurProduct 值。
publicint maxProduct(int[] nums) { if(nums.length == 0) return 0; int product = nums[0]; int minCurProduct = nums[0]; // 到當前元素位置 max int maxCurProduct = nums[0]; // 到當前位置 min for (int i = 1; i < nums.length; i++) { if(nums[i] < 0) {// num[i] < 0, 則 curProduct 越小,乘積越大 int tmp = minCurProduct; minCurProduct = maxCurProduct; maxCurProduct = tmp; } maxCurProduct = Math.max(nums[i], maxCurProduct * nums[i]); minCurProduct = Math.min(nums[i], minCurProduct * nums[i]); product= Math.max(product, maxCurProduct); } return product; }
152. Maximum Product Subarray