关于LeetCode上“最大子序和”的练习

·暴力法解题·
挺简单的,就直接贴代码了

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%

关于其他方法看了看大佬们的讲解还不是很懂也就没写代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值