浙大数据结构最大子列和问题

想要进微软 2018-04-05 02:09:29


#include <stdio.h>
#include <malloc.h>
int main()
{
int t;
printf("输入整数组元素个数");
scanf("%d", &t);
int *p;
p = (int *)malloc(sizeof(int)*t); //创建一个由输入确定长度的数组
printf("输入数组");
for (int i = 0; i < t; i++)
scanf("%d", &p[i]);
int fmax=0,max = 0;
for (int i = 0; i < t; i++)
{
max += p[i];
if (max < 0)
max = 0;
if (max > fmax)
fmax = max;
}
printf("%d", fmax);
}
...全文
1031 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wallesyoyo 2018-04-09
  • 打赏
  • 举报
回复
《算法导论》第三版中,在引入分治策略的算法思想时,用的就是这个 最大子数组的问题 作为例子讲的,书中是使用的分治法,但在课后习题中,提供了一种新的思路,非递归并且在线性时间内求解的算法,算法非常巧妙。 如果如题中所说,不考虑最大值为负数的情况,并且只用求出最大和,不用给出最大子数组的索引下标,那么问题就变得很简单啦。 下面是代码。

#include <algorithm>
int MaxSumOfSubArray(int* a, int n)
{
	int maxA = 0;
	int maxR = 0;

	for (int i = 0; i < n; ++i)
	{
		maxR = std::max(a[i], maxR + a[i]);
		maxA = std::max(maxA, maxR);
	}

	return maxA;
}
自信男孩 2018-04-08
  • 打赏
  • 举报
回复
zhouqunhai 2018-04-08
  • 打赏
  • 举报
回复
算法就不对,你只考虑了从第一个数据开始的子序列,没有考虑到从第二个、第三个数据...开始的子序列,应该讲所有情况都考虑到
考拉一枚 2018-04-08
  • 打赏
  • 举报
回复
引用 3 楼 qq_30918465 的回复:
printf("输入整数组元素个数");没要求输出这个
oj的题要按照要求的输入输出来
真相重于对错 2018-04-05
  • 打赏
  • 举报
回复
你的算法不对
永远的追梦人 2018-04-05
  • 打赏
  • 举报
回复
printf("输入整数组元素个数");没要求输出这个
赵4老师 2018-04-05
  • 打赏
  • 举报
回复
百度搜相关关键字。
想要进微软 2018-04-05
  • 打赏
  • 举报
回复
请问大神们我错在哪里?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧