题解 | #最大序列和#

最大序列和

https://www.nowcoder.com/practice/df219d60a7af4171a981ef56bd597f7b

#include "iostream"
#include "vector"
using namespace std;

// 思路:
// 从最后一个节点出发,不断计算局部最大值并将其保存至dp
// 具体思路:对比自身 & 自身+dp[i+1] 取最大值
// 举例分析:
// 如 1 5 -3 2 4
// dp的初始状态为 0 0 0 0 4 最后一个元素为起始状态
// 开始计算倒数第二个元素 2 的dp值:对比(2,2+dp[i+1])即(2,2+4)最大值为6,dp数组更新为 0 0 0 2 4 maxDp=4
// 倒数第三个 -3 max(-3,-3+6) dp:0 0 3 2 4 maxDp=4
// 倒数第四个 5 max(5,5+3) dp:0 8 3 2 4 maxDp=8
// 最后一个 1 max(1,1+8) dp:9 8 3 2 4 maxDp=9 结果为9
// 实现过程如下
int main() {
	int num;
	while (cin >> num) {
		// define:
		vector<long long int> dp(num);					// 预分配空间
		vector<int> input(num);
		// input:
		for (int i = 0; i < num; i++) cin >> input[i];	// 输入
		// dp:
		dp[num - 1] = input[num - 1];					// 起始状态:最后一个元素的dp一定等于自身
		long long int maxDp = dp[num - 1];				// 记录全局最大值
		for (int i = input.size() - 2; i >= 0; i--) {	// 从倒数第二个开始逆向计算
			long long int temp = input[i] + dp[i + 1];	// 自身+后一个元素的字串最大值(dp)
			dp[i] = temp > input[i] ? temp : input[i];	// 记录dp:对比自身 & 自身+dp[i+1] 取最大值
			maxDp = dp[i] > maxDp ? dp[i] : maxDp;		// 记录全局最大值
		}
		// output:
		cout << maxDp << endl;
	}
	return 0;
}

全部评论

相关推荐

在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务