Loading

Leetcode-53-(经典题)最大连续子数组和

题目链接


题目描述

一个整数数组 nums ,找出一个具有最大和的连续子数组,返回其最大和。

思路

方法一:动态规划
f[i] 表示以 i 结尾的子数组的最大和
则只需要求出每个位置的 f[i],然后返回 f 数组中的最大值即可。
如何求 f[i]
可以考虑 nums[i] 单独成为一段, 还是加入 f[i-1] 对应的那一段,
这取决于 nums[i]f(i−1)+nums[i] 的大小
动态规划转移方程:
\(f(i) = \max \{ f(i-1) + \textit{nums}[i], \textit{nums}[i] \}\)


方法二:分治
就是线段树: 最大子段和 最长上升子序列


方法一:C++代码

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int ans = nums[0];
        int n = nums.size();
        vector<int> f(n);
        f[0] = nums[0];
        for (int i = 1; i < n; i++) {
            f[i] = max(nums[i], nums[i]+f[i-1]);
            ans = max(ans,f[i]);
        }
        return ans;
    }
};
posted @ 2022-01-18 14:23  ARUI丶  阅读(22)  评论(0编辑  收藏  举报