贪心思想之——最大子段和问题

题目描述:

数组中子段的最大总和。

例如,1 2 3 -5 4 3 -6 中的最大子段总和是 1 + 2 + 3 +( - 5)+ 4 + 3 = 8

输入格式:

第一行一个整数 nn。(1≤n≤100000)(1≤n≤100000)

第二行 nn 个整数 aiai​。(−10000≤ai≤10000)(−10000≤ai​≤10000)

输出格式:

一个整数表示最大子段和

贪心思想,非常重要!

我们首先要明确贪心的过程:两个变量,sum表示某个区间的区间和 ,mx表示sum每个形态 中的最大值。贪心思想为sum初始值为0,一直累加a[i],并用mx记录下sum的最大值如果sum小于0,就重新开始,因为负数加上一个数不如0加上那个数,当然我们必须要注意,在输入数组全部为负数的时候,输出最大(距离0最近)的负数。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;


int main() {
	int n, mx = 0x80000000, a[100005];
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		mx = max(mx, a[i]); // 临时记录下最大值 
	}
	if (mx < 0) {
		cout << mx << endl; // 如果全部为负数,输出离0最近的数。 
		return 0;
	}
	mx = 0x80000000; // 重新初始化,新的意义为sum的最大形态 
	int sum = 0;
	for (int i = 1; i <= n; i++) {
		mx = max(mx, sum); // 更新 
		sum += a[i]; // 累加 
		if (sum < 0) // 当sum < 0,就把区间的左边更新,一切重新开始 
			sum = 0;
	}
	cout << mx << endl;
	return 0;
}

感谢阅读,如有错误或者建议请在评论区指出,进入我主页探索更多算法知识!

相关推荐
我想进大厂27 分钟前
图论---朴素Prim(稠密图)
数据结构·c++·算法·图论
我想进大厂32 分钟前
图论---Bellman-Ford算法
数据结构·c++·算法·图论
AIGC大时代34 分钟前
高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
数据库·人工智能·算法·aigc·智能写作·deepseek
lkbhua莱克瓦2442 分钟前
用C语言实现——一个中缀表达式的计算器。支持用户输入和动画演示过程。
c语言·开发语言·数据结构·链表·学习方法·交友·计算器
CODE_RabbitV1 小时前
【深度强化学习 DRL 快速实践】近端策略优化 (PPO)
算法
Wendy_robot2 小时前
【滑动窗口+哈希表/数组记录】Leetcode 438. 找到字符串中所有字母异位词
c++·算法·leetcode
程序员-King.2 小时前
day49—双指针+贪心—验证回文串(LeetCode-680)
算法·leetcode·贪心算法·双指针
转基因3 小时前
Codeforces Round 1020 (Div. 3)(题解ABCDEF)
数据结构·c++·算法
Forworder3 小时前
[数据结构]树和二叉树
java·数据结构·intellij-idea·idea
我想进大厂4 小时前
图论---Kruskal(稀疏图)
数据结构·c++·算法·图论