解題思路
題目敘述讓我想到之前寫過 53. Maximum Subarray 這題,只是變成乘積最大。
一樣另外開陣列,存當下那個數的 subarray 最大能多少。但乘法與加法不一樣,兩個負數相乘會變回正,所以也要存最負 array。
程式碼
class Solution { public: int maxProduct(vector<int>& nums) { vector<int> maxArr(nums.size(), 0); vector<int> minArr(nums.size(), 0); maxArr[0] = nums[0]; minArr[0] = nums[0]; int maxP = maxArr[0]; for(int i=1; i<nums.size(); i++) { maxArr[i] = max({nums[i], maxArr[i-1] * nums[i], minArr[i-1] * nums[i]}); minArr[i] = min({nums[i], maxArr[i-1] * nums[i], minArr[i-1] * nums[i]}); maxP = max(maxP, maxArr[i]); } return maxP; } };
沒有留言:
張貼留言