Delete one or except itself
1 min readFeb 7, 2020
238. Product of Array Except Self
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
const int n = nums.size();
vector<int> left(n), right(n), res(n);
left[0] = nums[0];
right[n-1] = nums[n-1];
for(int i=1;i<n;++i)left[i] = left[i-1]*nums[i];
for(int i=n-2;i>=0;--i)right[i] = right[i+1]*nums[i];
for(int i=0;i<n;++i){
res[i] = (i-1>=0?left[i-1]:1)*(i+1<n?right[i+1]:1);
}
return res;
}
};
1186. Maximum Subarray Sum with One Deletion
class Solution {
public:
int maximumSum(vector<int>& arr) {
const int n=arr.size();
if(n==1)return arr[0];
vector<int> left(n), right(n);
left[0]=arr[0], right[n-1]=arr[n-1];
for (int i=1;i<n;++i){
left[i] = max(left[i-1],0)+arr[i];
}
for (int i=n-2;i>=0;--i){
right[i] =max(0,right[i+1])+arr[i];
}
int res = -(1<<30);
for (int i=0;i<n;++i){
if(i==0)res=max(res, right[i+1]);
else if(i==n-1)res=max(res,left[i-1]);
else {
res = max(res, right[i+1]);
res = max(res, left[i-1]);
res = max(res, left[i-1]+right[i+1]);
}
}
return res;
}
};