LeetCode - 152. Maximum Product Subaray-考え方の詳細-C++


タイトル
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4], the contiguous subarray [2,3] has the largest product = 6.
翻訳
与えられた配列の中で連続サブ配列の成績が最も大きいことを見出した.例えば、与えられた配列は【2,3,−2,4】連続サブ配列であり、成績は最大6である.
構想
配列内のデータは正負であることに気づくだろう.だから、ちょっと苦手です.
しかし、よく分析します.正数に正数を乗じて正数、負数に負数を乗じて正数を乗じます.たとえば、現在の要素の値が正の場合、正の値はさらに大きくなります.すなわち、より大きな値が現れ、負数が現れた場合、負数を乗じてより大きな値が得られる.したがって、最大値と最小値の2つの値を記録する必要があります.初期値、最大値、最小値はいずれも最初の要素です.次に、配列を後方に巡回し、最大値と最小値をそれぞれ乗算して結果を得、最大値と両者の積結果の最大値の比較を更新します.次に、最小値と積結果の最小値の比較を更新します.
コード#コード#
class Solution {
public:
     int maxProduct(vector<int>& nums) {
        int maxPro= nums[0];
        int minPro = nums[0];
        int res = nums[0];

        int n = nums.size();
        for(int i = 1 ;i < n; i++){
            int t1 = maxPro*nums[i];
            int t2 = minPro*nums[i];
            //       
            maxPro = max(max(t1,t2),nums[i]);
            minPro = min(min(t1,t2),nums[i]);
            res = max(maxPro,res);
        }

        return res;
    }
};