数组中最大子数组之和

一、目的

熟悉编程风格

自学简单 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使用率

内存使用率

性能向导

posted @ 2021-03-13 01:01  xh嘿  阅读(179)  评论(1)    收藏  举报