最大子數組乘積演算法,子數組乘積演算法
給出一數組a,求最大子數組乘積
演算法思路:用動態垃規劃.用maxValue(n)表示從0到n的最大子數組乘積,minValue(n)表示從0到n的最小子數組乘積。
狀態轉移方程為:
minValue(n)= min{minValue(n-1)*a[n], maxValue(n-1)*a[n], a[n]}
maxValue(n)=max{minValue(n-1)*a[n], maxValue(n-1)*a[n], a[n]}
在求取最大子數組乘積時,更新最大值結果。
代碼如下:
class Solution{public: int maxProduct(vector<int>& nums) { int minValue = 1, maxValue = 1, result = numeric_limits<int>::min(); int len = nums.size(); for (int i = 0; i < len; i++) { int tempMin = min(maxValue * nums[i], min(minValue * nums[i], nums[i])); int tempMax = max(maxValue * nums[i], max(minValue * nums[i], nums[i])); minValue = tempMin; maxValue = tempMax; result = max(result, maxValue); } return result; }};以數組[2,3,-2,4]為例,輸出結果為6
驗證代碼為:
#include <iostream>#include <algorithm>#include <vector>#include <limits>using namespace std;int main(){ int a[4] = {2, 3, -2, 4}; vector<int> nums(a, a + 4); Solution solver; int res = solver.maxProduct(nums); cout << res << endl; return 0;}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。