【发布时间】:2020-12-11 19:19:39
【问题描述】:
给定一个整数数组 nums,找出总和最大的连续子数组(至少包含一个数)并返回它的总和。
例子:
输入:[-2,1,-3,4,-1,2,1,-5,4], 输出:6 解释:[4,-1,2,1] 的和最大 = 6。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int max=INT_MIN;
int result;
int i,j;
if(nums.size()==1)
return nums[0];
if(nums.size()==0)
return 0;
for(i=0;i<nums.size();i++)
{
for(j=i;j<nums.size();j++)
{
result=accumulate(nums.begin()+i,nums.begin()+j+1,0);
if(result>max)
max=result;
}
}
return max;
}
};
它已经通过了 200/202 个测试用例,但在其余 2 个测试用例上出现了时间限制延长问题。如何优化?
【问题讨论】:
-
这看起来像是来自某个竞赛/挑战/竞争性编码/黑客网站。是吗?如果您的目标是学习 C++,那么您将不会在那里学到任何东西。在几乎所有情况下,就像这个一样,正确的解决方案是基于数学或编程技巧。如果您不知道诀窍是什么并尝试编写蛮力方法,则程序运行缓慢并因此而失败。如果你想学习 C++,你不会从毫无意义的在线竞赛网站 but only from a good C++ textbook 学到任何东西。
-
您通过使用不同的算法来“优化”。 (这看起来像一个动态规划问题,所以我将从那里开始。)
-
是的,我认为这是一个 dp 问题,只是在寻找一种方法我可以在不使用 DP 的情况下在给定时间内解决它
标签: c++ algorithm vector data-structures dsa