LeetCode[53]最大子数组和

  • Description:

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

  • 解法1:遍历--超时,内存超限,不通过,算法复杂度O(n^3)了吧
int sum(vector<int>& v, int begin, int num)
    {
        int s = 0;
        for(int i = 0; i < num; i++)
            s += v[begin+i];
        return s;
    }
    int maxSubArray(vector<int>& nums) {
        
        int max = nums[0], n = 1;
        int size = nums.size();
        if(size == 1)
            return nums[0];
        while(n <= size)
        {
            for(int i = 0; i + n <= size; i++)
            {                
                int s = sum(nums, i, n);
                if(s > max)
                    max = s;
            }
            n++;
        }
        return max;
    }
  • 解法2:动态规划

这里有个关键状态转移方程的定义,dp[i] = max(nums[i], nums[i]+dp[i-1],在这道题里了解到了算法里的无后效性,dp[i]表示以nums中第i个元素结尾的和最大的字符串,所以dp[i]分为两种情况,一种是nums[i]单独一个元素成为字符串,或者加上前边的第[i-1]个元素形成的字符串,即nums[i]+dp[i-1],两者中取最大的即为dp[i]=max(nums[i], nums[i]+dp[i-1])

int maxSubArray(vector<int>& nums) {
        int size = nums.size();
        vector<int> dp(size);
        dp[0] = nums[0];
        for(int i = 1; i < size; i++)
            dp[i] = max(nums[i], nums[i] + dp[i-1]);
        int res = dp[0];
        for(int i = 0; i < size; i++)
            res = max(res, dp[i]);
        return res;
    }

相关推荐

  1. LeetCode[53]

    2024-01-06 16:58:02       41 阅读
  2. LeetCode 53

    2024-01-06 16:58:02       39 阅读
  3. 53. (力扣LeetCode

    2024-01-06 16:58:02       25 阅读
  4. leetcode 53

    2024-01-06 16:58:02       10 阅读
  5. leetcode 53.

    2024-01-06 16:58:02       11 阅读
  6. LeetCode每日一题】53.

    2024-01-06 16:58:02       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-06 16:58:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-06 16:58:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-06 16:58:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-06 16:58:02       20 阅读

热门阅读

  1. 机器学习的几个需求层次

    2024-01-06 16:58:02       35 阅读
  2. spdlog源码学习

    2024-01-06 16:58:02       38 阅读
  3. 《微信小程序开发从入门到实战》学习七十三

    2024-01-06 16:58:02       34 阅读
  4. 如何停止一个运行中的Docker容器

    2024-01-06 16:58:02       43 阅读
  5. 步进电机调速原理

    2024-01-06 16:58:02       35 阅读
  6. vs c++ qt 叫请求的json 输出到输出终端

    2024-01-06 16:58:02       29 阅读