数据结构001:最大子数组和
admin
2024-03-19 19:42:07
0

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

题目

给你一个整数数组 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结尾的子数组和最大值为
fa−max=a(1)f_{a-max}=a \tag1 fa−max​=a(1)
对于2,以b结尾的子数组和最大值为
fb−max=max{a+b,b}=max{fa−max+b,b}(2)f_{b-max}=max\{a+b, b\}\\=max\{ f_{a-max}+b, b\} \tag2 fb−max​=max{a+b,b}=max{fa−max​+b,b}(2)
对于3,以c结尾的子数组和最大值为
fc−max=max{a+b+c,b+c,c}=max{fb−max+c,c}(3)f_{c-max}=max\{a+b+c, b+c, c\}\\ =max\{f_{b-max}+c, c\} \tag3 fc−max​=max{a+b+c,b+c,c}=max{fb−max​+c,c}(3)
依次类推:
fd−max=max{a+b+c+d,b+c+d,c+d,d}=max{fc−max+d,d}(4)f_{d-max}=max\{a+b+c+d, b+c+d, c+d, d\}\\ =max\{f_{c-max}+d, d\} \tag4 fd−max​=max{a+b+c+d,b+c+d,c+d,d}=max{fc−max​+d,d}(4)

fe−max=max{a+b+c+d+e,b+c+d+e,c+d+e,d+e,e}=max{fd−max+e,e}(5)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 fe−max​=max{a+b+c+d+e,b+c+d+e,c+d+e,d+e,e}=max{fd−max​+e,e}(5)

由公式1-5可得,数组{a, b, c, d, e}中连续子序列和最大值为
max{fa−max,fb−max,fc−max,fd−max,fe−max}(6)max\{f_{a-max}, f_{b-max}, f_{c-max}, f_{d-max},f_{e-max}\} \tag6 max{fa−max​,fb−max​,fc−max​,fd−max​,fe−max​}(6)

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

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

相关内容

热门资讯

丝路花儿传雅韵 青稞酒香迎盛会 八月的青藏高原,青稞正绿,酒香沁人。8月1日,2025年青海丝路花儿艺术节之第八届青稞酒文化旅游宣传...
家常版泡椒牛蛙零失败教程鲜嫩入... 泡椒牛蛙净重约1000克牛蛙3只,粗盐2茶匙,料酒30毫升,干淀粉1汤匙。腌料:盐2克,白胡椒粉1克...
今天起,晚饭时间请调整一下! 不少人体检查出了脂肪肝 想通过饮食、运动 等方式来改善 但有时候效果甚微 或许可以试试 晚餐吃早一点...
深夜味蕾暴击!香辣江湖菜+烟火... 嗨“啤”一夏!峨眉雪芽茶啤
27款菜肴精选:小炒牛肉、素炒... 曾经看到一篇文章中写道:“美食当前,总能有所思,或馋性千娇,食前观察、吃中思想、品后体煨,食为天性,...
“海南好米”亮相首届海峡两岸(... 央广网海口8月3日消息(记者 索迪)8月3日,首届海峡两岸(海南)厨艺美食产业大会在海口举行,两岸青...
HOCH汉堡节首登青岛引爆夏日... 今夏的青岛奥帆中心,一场以汉堡为主题的美食盛宴正火热上演。7月25日至8月3日,首届登陆北方的HOC...
经典名汤——焦炸肥肠 编者按:本公众号自2016年创立以来,一直关注人类科学(史)、技术(史)、博物(史)三大领域。当下,...
2025西藏十佳旅行社排名发布... 你是否正在为西藏之行挑选旅行社而纠结?西藏,拥有独特的自然风光和深厚的文化底蕴,但高原环境复杂,旅行...
日照日记|吃了这些宝藏小店! 日照日记|吃了这些宝藏小店! 一、巧克力渔家 来日照旅游的朋友可别错过巧克力渔家,来玩一定要尝尝巧克...
原创 泰... 根据《财富泰国》在7月31日下午发布的最新消息,泰国与柬埔寨之间的边境冲突正在持续加剧,并且这一局势...
山野的治愈力量,超乎想象! 临安的吴越古道,早有耳闻。但真正去往古道走走看看,完全始于一次偶然的机会,几个朋友邀请我去临安的山里...
原创 重... 这里是刘小顺的旅行和生活研究所。 前段时间和朋友闲聊,话题无意间转到了重庆与四川。当我兴致勃勃地描...
暑期预订涨38%,为什么文旅还... “过去最多人一年计划旅行1—2次(42.6%),如今最多人计划旅行3—4次(39.5%),而打算旅行...
张家界旅游5天四晚必打卡景点推... 第一天:抵达张家界,初探武陵源 我和闺蜜乘坐早班机抵达张家界荷花国际机场,2025年的机场扩建工程已...