数组中最大子数组之和
一、目的
熟悉编程风格
自学简单 Python 代码
简单性能测试
二、编程
1、测试工具及注意事项
使用Visual Studio 2017进行编译,求数组中最大数组之和。
注意:
1.题目说的是子数组是连续的
2.题目只要求和,不需要返回数组的具体位置
3.数组的元素是整数
2、单元测试配置过程
要想在 VS2017 里对 C++项目进行单元测试,首先要新建一个测试项目。右键单击解决方案,可以添加一个新建项目,在类型里选择【单元测试】,我们这里新建了一个名为UnitTest2.cpp 的单元测试项目。

在项目创建成功后,为单元测试项目 UnitTest2.cpp 增加对原项目的引用,以实现调用原项目函数接口的功能。

3、处理数组中最大的子数组之和的程序,代码如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
//求最大连续子序列和
int FindGreatestSumOfSubArray(int arry[], int len)
{
if (arry == NULL || len <= 0)
return -1;
int currSum = 0;//保存当前最大和
int greatestSum = -10000;//保存全局最大和
for (int i = 0; i < len; i++)
{
if (currSum < 0)//如果当前最大和为负数,则舍弃前面的负数最大和,从下一个数开始计算
{
currSum = arry[i];
}
else
currSum += arry[i];//如果当前最大和不为负数则加上当前数
if (currSum > greatestSum)//如果当前最大和大于全局最大和,则修改全局最大和
{
greatestSum = currSum;
}
}
return greatestSum;
}
void main()
{
int arry[10000];
int Length = 0, i;
cout << "输入数组的大小" << endl;
cin >> Length;
cout << "依次输入数组的值" << endl;
for (i = 0; i < Length; i++)
cin >> arry[i];
int len = sizeof(arry) / sizeof(int);
//cout<<len<<endl;
int sum = FindGreatestSumOfSubArray(arry, len);
cout << "最大子序列和:" << sum << endl;
system("pause");
}
4、进行单元测试代码如下:
#include "pch.h"
#include "CppUnitTest.h"
#include "..\Console\Max.cpp"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace UnitTest2
{
TEST_CLASS(UnitTest2)
{
public:
TEST_METHOD(TestMethod1)
{
int test[] = { 1, -2, 3, 5, -3, 6, 1, -1 };
Assert::AreEqual(12, FindGreatestSumOfSubArray(test,8));
int test1[] = { 1, 6, 1, -1 };
Assert::AreEqual(8, FindGreatestSumOfSubArray(test1,4));
}
};
}
三、单元测试验证程序的正确性、以及运行结果截图

四、性能分析
cpu使用率

GPU使用率

内存使用率

性能向导


浙公网安备 33010602011771号