题解 | #最大序列和#

最大序列和

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;
}

全部评论

相关推荐

10-29 19:42
门头沟学院 Java
点赞 评论 收藏
分享
||&nbsp;先说下主播个人情况:211本,暑期实习之前有过一段中大厂的后端实习,暑期拿过腾讯的实习offer,综合考虑业务和语言最终去了美团。实习期间体感还是不错的,5月初去的,去了就一直急着要需求做,担心因为没有产出导致转正失败,在第二个星期就和mt透露我希望能够留用。虽然第一个由于美团新人landing的友好性基本没做什么需求,但是后面也写出了小2w行的代码量(不包含单测)。中期经常主动加班赶需求,经常持续一两个星期加班到10点甚至更后面。mt对我确实不错,也是言传身教,实习期间给我讲了很多关于单测,ddd,set化等的理解,也是受益匪浅,此外在做需求的时候,也能看出把比较有含金量的部分交给我做...
菜菜菜小白菜菜菜:我在字节实习了四个月,有转正的压力所以周末大部分也在公司自学,也是因为一些原因转正拖的很久,这个点还没答辩,过段时间才回去答辩。整个不确定性的焦虑贯穿了我的秋招三个月,我也曾经犹豫过是不是应该放弃转正走秋招更快,最后因为沉没成本一直舍不得放弃,前前后后七个月真的挺累的,尤其是没有来字节实习的同学已经校招拿到意向时更加焦虑。这段时间也跟mentor聊了很多次,他告诉我未来工作上或者生活上,比这些更头疼的事情会更多,关键还是要调整好自己的心态。转正没有通过从过程上来看其实跟你自身没太大的关系,拖了三个月不出结果显然是ld的问题,并且今年美团最近的开奖大家似乎都不是很乐观,所以不去也罢。我在字节实习的时候,6月份有一个赶上春招末期的25届同事刚面进来,也拿到了小sp的薪水。不要对这件事有太大的压力,时代的问题罢了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务