·暴力法解题·
挺简单的,就直接贴代码了
class Solution {
public:
int maxSubArray(vector<int>& nums)
{
int sum;
int maxsum=INT_MIN;
for (int i = 0; i < nums.length; i++)
{
sum = 0;
for (int j = i; j < nums.length; j++)
{
sum += nums[j];
if (sum > maxsum)
maxsum = sum;
}
}
return maxsum;
}
时间复杂度:O(n2)
执行用时:424ms,7.38%
·动态规划解题·
我们可以将某个问题定义为某个状态,即将解决问题的过程看作状态转移的过程,而转移状态中所需要的空间就是空间复杂度,所需要的时间就是时间复杂度。既然是状态转移的过程,那么我们可以根据一定的模式,从旧状态推到新状态,不需要考虑其他阶段的状态,也不需要加入其他旧状态去进行计算。而之前的状态影响下一步的状态的选择,就是有后效性,每个阶段的最优状态由之前所有阶段的状态组合得到。而动态规划,每个阶段的最优状态是从之前的某个阶段或某些阶段的某个或某些状态状态直接得到而忽略该状态的计算过程,就是包含了最优子结构和无后效性。
class Solution {
public:
int maxSubArray(vector<int>& nums)
{
int sum=0;
int maxsum=INT_MIN;
if(nums.size()==0)
return NULL;
for(int i=0;i<nums.size();i++)
{
sum=max(sum+nums[i],nums[i]);
maxsum=max(maxsum,sum);
}
return maxsum;
}
}
时间复杂度:O(n)
执行用时:12ms,45.31%
关于其他方法看了看大佬们的讲解还不是很懂也就没写代码。