classSolution { public: intmaxProduct(vector<int>& nums){ int n = nums.size(), res = INT_MIN; for (int i = 0; i < n; ) { if (nums[i] == 0) { res = max(nums[i++], res); continue; } int start = i; while (i < n && nums[i] != 0) { i++; } res = max(res, maxP(start, i - 1, nums)); } return res; }
intmaxP(int start, int end, vector<int>& nums){ if (start == end) { return nums[start]; } int res = 1; for (int i = start; i <= end; i++) { res *= nums[i]; } if (res > 0) { return res; } int cur = 1, res1, res2; for (int i = start; i <= end; i++) { cur *= nums[i]; if (nums[i] < 0) { res1 = res / cur; break; } } cur = 1; for (int i = end; i >= start; i--) { cur *= nums[i]; if (nums[i] < 0) { res2 = res / cur; break; } } returnmax(res1, res2); } };