【发布时间】:2020-10-11 00:33:12
【问题描述】:
我正在解决 LeetCode 上的Maximum Subarray Sum with One Deletion:
给定一个整数数组,返回最多删除一个元素的非空子数组(连续元素)的最大和。对于输入
arr = [1,-2,0,3],输出应为4。
我想出了一个递归解决方案如下:
类解决方案{
民众:
int helper(vector& n, vector& 缓存, int startIndex) {
if(startIndex>=n.size()) return INT_MIN;
if(cache[startIndex]!=-1) return cache[startIndex];
int allInclusiveSum=0,sumWithOneDel=0,lowestVal=INT_MAX,maxVal=INT_MIN;
for(int i=startIndex; i& arr) {
int i=0, first=arr[0];
for(i=1;i缓存(arr.size(),-1);
返回助手(arr,缓存,0);
}
};
不幸的是,这个 TLE。由于我使用startIndex+1 递归调用,我真的不认为我遇到了重叠的子问题。
有没有办法让我记住我的解决方案?如果不是,为什么?
【问题讨论】:
-
嗯,26 次浏览和没有评论让我觉得我错过了一些东西/我的问题不正确。有人可以指出,以便我可以编辑它吗?谢谢!
-
这是视图 27 ;-)。问题是,现在理解你的(或任何)算法对我来说需要太长时间,更不用说理解与另一个算法的细微差别了 ;-)。
-
这里有大量的代码,并且没有真正的指导从哪里开始寻找问题。当我听到“memoize”时,我立即想到“为什么不使用
std::map来缓存?”但是我没有看到,所以... -
@user3386109,所以我想我的错误是我使用了递归和迭代的组合,这就是我无法有效缓存它的原因。 (本质上只是蛮力)。谢谢,有帮助! :)
-
我倾向于放弃这个。你总是可以自己回答:)
标签: c++ algorithm recursion dynamic-programming memoization