1. 程式人生 > >152. Maximum Product Subarray

152. Maximum Product Subarray

求一個 最小 最小乘積 div i++ public pro return bubuko

一、題目

  1、審題

  技術分享圖片

  2、分析

    求一個整數數組中的連續子串的最大乘積。

二、解答

  1、思路:

      ①、遍歷數組,采用三個變量進行記錄。

          maxCurProduct:包含當前下標的數組元素時的最大乘積。

          minCurProduct: 包含當前下標的數組元素時的最小乘積。

          product:   當前為止的最大乘積。

      ②、因為數組中可能存在負數,而 負數乘以越小的數乘積越大。故當 arr[i] < 0 時,交換 maxCurProduct 與 minCurProduct 值。

    public
int 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