乘積最大子串行

2021-07-05 13:14:43 字數 875 閱讀 3499

比如, 序列[2,3,-2,4]中乘積最大的子串行為[2,3],其乘積為6

方法一:自己一開始寫的方法比較麻煩。通過記錄陣列中元素為0的下標,然後以0為邊界,分割陣列,然後對每個分割後的陣列分別求最大乘積子串行,最後在所有的分割陣列的最大乘積子串行中取最大乘積。

class solution 

int len=zeroindex.size();

if(zeroindex[0]==n) return maxmulti(nums,0,n-1);

else

res*=nums[i];

}if(count%2==0) return res;

else

}for(int i=right;i>=left;i--)

}return max(maxmulti(nums,left,itend-1),maxmulti(nums,itbeg+1,right));}}

};

方法二:非常簡潔的方法,訪問到某個元素時,此時的最大乘積子串行,只有兩種情況:一是該元素本省,二是該元素乘以「以前一點為末尾的子串行」。

class solution {

public:

/*** @param nums: a vector of integers

* @return: an integer

*/int maxproduct(vector& nums) {

int premax=nums[0];

int premin=nums[0];

int res=nums[0];

int n=nums.size();

for(int i=1;i

最大子串行乘積

思路 以元素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 不是子陣列。由於存在負數,那麼最大的數可能變最小的數,最小的...

乘積最大子串行

本道題要求我們從乙個找出乘積最大的連續子串行 該序列至少包含乙個數 首先,必須要滿足的條件是連續,那麼相比較我們之前做的最大子串行和來說,本題存在的乙個難點就是 乙個最大的乘積的連續序列乘以乙個負數後,就會變成最小的,同樣,本來是最小的乘積的連續序列乘以乙個負數後,有可能會變成最大的,如果參照最大子...