Delete one or except itself

Jimmy (xiaoke) Shen
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

reference:https://leetcode.com/problems/maximum-subarray-sum-with-one-deletion/discuss/377522/C++-forward-and-backward-soluti
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;
}
};

--

--

No responses yet