Untitled
class Solution { public: int check(int l, int r , vector <int> &a){ if(l==r) return max(0,a[l]); if(l>r) return 0; int mid = l + (r-l)/2; int left = check(l,mid,a); int right = check(mid+1,r,a); int ans = max(left,right); int pl = 1; int flag =0; int runl = 1; for(int i = mid; i>=l;i--){ runl *= a[i]; if(runl>pl) {runl = pl; flag = 1;} if(runl == 0) break; } int pr = 1; int runr = 1; for(int i=mid+1;i<=r;i++){ runr *= a[i]; if(runr > pr) {runr = pr; flag = 1;} if(runr == 0) break; } int middle = pr*pl; if(middle == 1 && flag == 0) middle = 0; return max(middle , ans); } int maxProduct(vector<int>& a) { int n = a.size(); int ans = check(0,n-1,a); return ans==0 ? *max_element(a.begin(),a.end()) : ans; } };
Leave a Comment