Untitled
unknown
plain_text
a year ago
972 B
12
Indexable
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;
}
};Editor is loading...
Leave a Comment