美文网首页数据结构
数据结构001:最大子数组和

数据结构001:最大子数组和

作者: 艰默 | 来源:发表于2022-12-04 19:14 被阅读0次
题目

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

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

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例 2:

输入:nums = [1]
输出:1

示例 3:

输入:nums = [5,4,-1,7,8]
输出:23
解题思路

要求字数组中和最大的那组对应的和,首先能想到的是完全遍历,使用暴力求解的方法,确实可以解决问题,但有没有更简单一点的方法呢?答案肯定是有的(这话貌似很是废话)。换种思路,如果针对元素数量较少的数组,我们使用完全遍历,貌似没有什么压力,因此,我们不妨从简单的数组子数组入手,看看能不能发现什么规律。

下面我们以数组{a, b, c, d, e}为例,列举出其所有连续的子序列:

  1. 以a结尾的子数组{a};
  2. 以b为结尾的子数组{a, b}、{b};
  3. 以c为结尾的子数组{a, b, c}、{b, c}、{c};
  4. 以d为结尾的子数组{a, b, c, d}、{b, c, d}、{c, d}、{d};
  5. 以e为结尾的子数组{a, b, c, d, e}、{b, c, d, e}、{c, d, e}、{d, e}、{e}。

分析该问题,我们要找软柿子捏,首先分析1,以a结尾的子数组和最大值为
f_{a-max}=a \tag1
对于2,以b结尾的子数组和最大值为
f_{b-max}=max\{a+b, b\}\\=max\{ f_{a-max}+b, b\} \tag2
对于3,以c结尾的子数组和最大值为
f_{c-max}=max\{a+b+c, b+c, c\}\\ =max\{f_{b-max}+c, c\} \tag3
依次类推:
f_{d-max}=max\{a+b+c+d, b+c+d, c+d, d\}\\ =max\{f_{c-max}+d, d\} \tag4

f_{e-max} =max\{a+b+c+d+e, b+c+d+e, c+d+e, d+e, e\} \\ =max\{f_{d-max}+e, e\} \tag5

由公式1-5可得,数组{a, b, c, d, e}中连续子序列和最大值为
max\{f_{a-max}, f_{b-max}, f_{c-max}, f_{d-max},f_{e-max}\} \tag6

对于数组nums,我们设f(i)为以第i个元素结尾的连续子数组和最大值,则有:
f(i)=max\{ f(i-1)+nums[i],nums[i]\} \tag7
其中0<i<n(n为数组元素的个数)。其连续子序列和最大值为
max\{f(0), f(1), ..., f(n-1) \} \tag8
因此,此题代码实现如下:

int maxSubArray(vector<int>& nums) {
    int pre = 0, maxAns = nums[0];
    for (const auto &x: nums) {
        pre = max(pre + x, x);
        maxAns = max(maxAns, pre);
    }
    return maxAns;
}

原文链接:数据结构001:最大子数组和

相关文章

  • 数据结构001:最大子数组和

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

  • 动态规划

    求最大子数组,最大子乘积

  • Leetcode-Medium 152. Maximum Pro

    题目描述 给定一个整数数组nums(有正有负),求最大子数组乘积 思路 求最大子数组乘积问题是求最大子数组之和演变...

  • 53. 最大子序和

    题目链接: 53. 最大子序和 题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最...

  • LeetCode-152-乘积最大子数组

    LeetCode-152-乘积最大子数组 152. 乘积最大子数组[https://leetcode-cn.com...

  • Leetcode 53 最大子序和

    最大子序和 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最...

  • 分治算法解最大子序列和问题

    最大子序列和问题 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最...

  • 刷leetCode算法题+解析(六)

    最大子序和 题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最...

  • 数据结构学习笔记——最大子列和问题

    PTA 中国大学MOOC-陈越、何钦铭-数据结构 01-复杂度1 最大子列和问题(20 分) 给定K个整数组成的序...

  • 数据结构的基础介绍

    一、数组 数组(Array)大概是最简单,也是最常用的数据结构了。其他数据结构,比如栈和队列都是由数组衍生出来的。...

网友评论

    本文标题:数据结构001:最大子数组和

    本文链接:https://www.haomeiwen.com/subject/bqvvfdtx.html