首页 > 其他分享 >最大连续子数组和(最大子段和)

最大连续子数组和(最大子段和)

时间:2024-04-10 21:24:05浏览次数:17  
标签:最大 子段 int max Assert test num 数组 TEST

1.题目要求:

最大连续子数组和(最大子段和)
问题背景: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n

例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。

-- 引用自《百度百科》
程序代码:
`#include <stdio.h>

include <stdlib.h>

include <math.h>

include

using namespace std;
int main()
{
int number[50];
int n, i, j, k;
int sum = 0;
int max = 0;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> number[i];
}
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
int sum = 0;

		for (int k = i; k <= j; k++)
		{
			sum += number[k];
		}
		if (sum > max)
		{
			max = sum;
		}
	}
}
cout << max;
return 0;

}
`
3.代码流程图

4.我选用判定条件覆盖,使用五组测试用例
num[] = { 0 };
num[4] = { -2,-2,-3,-4 };
num[4] = { 4,2,6,5,};
num[4] = { 5,-2,3,4 };
num[4] = { 3,-8,6,4 };
测试代码如下:
TEST_METHOD(TestMethod1)
{
int max, num[] = { 0 };
max = test(num, 0);
Assert::AreEqual(max, 0);
}
TEST_METHOD(TestMethod2)
{
int max, num[4] = { -2,-2,-3,-4 };
max = test(num, 4);
Assert::AreEqual(max, 0);
}
TEST_METHOD(TestMethod3)
{
int max, num[4] = { 4,2,6,5,};
max = test(num, 4);
Assert::AreEqual(max, 17);
}
TEST_METHOD(TestMethod4)
{
int max, num[4] = { 5,-2,3,4 };
max = test(num, 4);
Assert::AreEqual(max, 10);
}
TEST_METHOD(TestMethod5)
{
int max, num[4] = { 3,-8,6,4 };
max = test(num, 4);
Assert::AreEqual(max, 10);
}
测试结果如下所示:{{uploading-image-877812.png(uploading...)}}

标签:最大,子段,int,max,Assert,test,num,数组,TEST
From: https://www.cnblogs.com/wuliyang1/p/18127446

相关文章

  • unordered_map在计算最大长度的无重复字符子串的作用总结
    例如:abcadfee计算结果为3,即abc或adf这里定义一个unordered_map<char,int>的哈希表,键为字符,值为该字符的下标intleft=0,len=0;for(inti=0;i<s.length();i++){charc=str[i];if(hash.count(c)){len=max(len,i-left);//计算最大长度left=max(left,hash[c]+1);//就算左指针......
  • 4.数组
    一、为什么需要数组由于变量只能存放一个值,当要一回存放多个值时会很麻烦,所以C++的创造者增加了数组这个概念,能够同时存放多个值。二、一维数组1.一维数组的定义//数组定义//格式:数据类型数组名[数组长度]={元1,2,元素3};inta1[5];floata2[15];doublea3[100];cha......
  • C++ 获取数组大小、多维数组操作详解
    获取数组的大小要获取数组的大小,可以使用sizeof()运算符:示例intmyNumbers[5]={10,20,30,40,50};cout<<sizeof(myNumbers);结果:20为什么结果显示为20而不是5,当数组包含5个元素时?这是因为sizeof()运算符返回类型的大小(以字节为单位)。要找出数组有多少......
  • 最大项和
    1.请从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中(条件组合覆盖难度较大,鼓励尝试,但请谨慎选择),任选一个标准设计测试用例条件覆盖,制定多个数据,让每种情况都出现1).制定输入的数据个数为5,输入正数数组,例如1,3,8,9,5,期待返回262).制定输入的数据个数为5,输......
  • 最大连续子数组和(最大子段和)
    作业信息 沈阳航空航天大学计算机学院2024软件工程作业课程目标 熟悉一个“高质量”软件的开发过程作业目标 单元测试练习请在作业最后部分填写如下表格记录本次工作详细信息项目 记录结果日期 2024.4.10开始时间 2024.4.9结束时间 2024.4.10结束时间 2024.4.10编码行数 ......
  • JAVA数组
    1.1数组的概念所谓数组(array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数......
  • 小美的数组构造(美团2024届秋招笔试第二场编程真题)
    题面核心思想dp[i][j]表示前i个数字和为j时的组合数那么第i个数的取法有1<=k<=j需要遍历第i个数取k前i-1个数取j-k时dp[i][j]=(dp[i][j]+dp[i-1][j-k])%MOD;注意是和为j第i个数取k所以是dp[i][j]。同时需要判断第i个数不能和a数组取相同的......
  • 数组1
    (一),一维数组(1)一维数组的创建和使用数组时一组相同元素的集合type_t   arr_name   [const_n];//type_t 是指数组的元素类型//const_n是一个常量表达式,用来指定数组的大小(2)一维数组的大小1,strlen和sizeof没有什么关联2,strlen是求字符串长度的-只能针对字符......
  • 最大连续子数组和(最大子段和)
    include<stdio.h>//函数用于返回给定数组的最大子段和intmaxSubArraySum(inta[],intsize){intmax_so_far=a[0];//初始化最大子段和为数组的第一个元素intcurr_max=a[0];//初始化当前子段和为数组的第一个元素for(inti=1;i<size;i++){//......
  • 后缀数组--SA--字符串
    SA(SuffixArray)--后缀数组简介这里明白两个定义:\(SA_i\):按字典序排列后大小为\(i\)的后缀的后缀头的下标。\(Rank_i\):后缀头的下标为\(i\)按字典序排列后的排名。一个显而易见却很重要的结论:\[SA[Rank[i]]=Rank[SA[i]]=i\]如何进行后缀排序?暂且挂oi......