求最大连续子数组和

探讨了给定数组中寻找最大子数组和的问题,先通过暴力枚举法实现,但由于时间复杂度过高导致效率低下,随后提出了算法改进的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述
给定一个数组a[0,…,n-1],求其最大子数组(长度>=1)和

输入描述
第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000])

输出描述
输出一个整数表示最大子数组和

样例输入
5
1 -1 1 1 -1

样例输出
2

首先使用最暴力的枚举法:

#include <iostream>
using namespace std;

int main() {
	int a, b=0, *p1, *p2;
	cin >> a;
	p1 = new int[a];

	//初始化p2数组,用来存放p1数组每一个子数组的和
	for (int i = 1; i <= a; i++){
		b += i;
	}
	b = b - 1;//去掉子数组包含原数组所有元素的情况
	p2 = new int[b];
	for (int i = 0; i < b; i++){
		p2[i] = 0;
	}

	//p2数组每个元素赋值
	for (int i = 0; i < a; i++){
		cin >> p1[i];
	}
	int num = 0;
	for (int i = 0; i < a; i++){
		for (int j = i; j < a; j++){
			for (int k = i; k <= j; k++){
				p2[num] += p1[k];
			}
			num++;
		}
	}

	//找出p2数组元素最大的值,放到p2[0]中
	for (int i = 1; i < b; i++){
		if (p2[0] < p2[i]){
			int temp = p2[0];
			p2[0] = p2[i];
			p2[i] = temp;
		}
	}

	//排除掉p2数组元素最大值为p1数组所有元素和的情况
	int c = 0;
	for (int i = 0; i < a; i++){
		c += p1[i];
	}
	if (p2[0] == c)
		p2[0] = -5000;

	//再执行一次,找出p2数组元素最大的值,放到p2[0]中
	for (int i = 1; i < b; i++){
		if (p2[0] < p2[i]){
			int temp = p2[0];
			p2[0] = p2[i];
			p2[i] = temp;
		}
	}

	cout << p2[0] << endl;

	return 0;
}

  结果得不到满分,因为时间超限。接下来要对算法进行改进,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值