数组中最大子数组之和
数组中最大子数组之和
题目:求一组数组中最大的子数组之和
一、实现代码
使用java编写的代码如下:
import java.util.Scanner; public class Maxsum { public int Max(int Array[],int size){ int max=Array[0]; int num; int sum=max; for(num=1;num<size;num++) { if(sum<0) sum=Array[num]; else sum+=Array[num]; if(sum>max) max=sum; } return max; } public static void main(String[] args){ Maxsum sum=new Maxsum(); Scanner in=new Scanner(System.in); int size=in.nextInt(); int []Array=new int[size]; int num; for(num=0;num<size;num++) Array[num]=in.nextInt(); System.out.println(sum.Max(Array,size)); in.close(); } }
使用C语言编写的代码为:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { public class Program { public int maxSubArray(int[] A, int n) { int cursum = A[0]; int maxsum = A[0]; for (int i = 0; i < n; i++) { if (cursum < 0) cursum = 0; cursum += A[i]; if (cursum > maxsum) maxsum = cursum; } return maxsum; } static void Main(string[] args) { int[] A = { -2, 5, 3, -6, 4, -8, 6 }; Program fuc = new Program(); Console.WriteLine(fuc.maxSubArray(A, A.Length)); Console.ReadKey(); } } }
二、单元测试
使用java语言进行单元测试的代码为:
import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; import static org.junit.Assert.*; public class MaxsumTest { Maxsum sum=new Maxsum(); public void setUp() throws Exception { } public void tearDown() throws Exception { } @Test public void testMax1() { int []Array=new int[]{1,-2,4,-1,-5}; assertEquals(4, sum.Max(Array,5)); } @Test public void testMax2() { int []Array=new int[]{1,-2,-4,1,5}; assertEquals(6, sum.Max(Array,5)); } @Test public void testMax3() { int []Array=new int[]{1,2,3,1,1}; assertEquals(8, sum.Max(Array,5)); } @Test public void testMax4() { int []Array=new int[]{-1,-2,-4,-1,-5}; assertEquals(-1, sum.Max(Array,5)); } @Test public void testMax5() { int []Array=new int[]{0,0,0,0,0}; assertEquals(0, sum.Max(Array,5)); } }
使用java对代码进行单元测试的结果为:

从左边的测试结果可以看出,每个测试用例都通过了测试。
使用C语言进行单元测试,代码如下:
using ConsoleApplication1; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; namespace MaxsumTest { /// <summary> ///这是 ProgramTest 的测试类,旨在 ///包含所有 ProgramTest 单元测试 ///</summary> [TestClass()] public class ProgramTest { private TestContext testContextInstance; /// <summary> ///获取或设置测试上下文,上下文提供 ///有关当前测试运行及其功能的信息。 ///</summary> public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #region 附加测试特性 // //编写测试时,还可使用以下特性: // //使用 ClassInitialize 在运行类中的第一个测试前先运行代码 //[ClassInitialize()] //public static void MyClassInitialize(TestContext testContext) //{ //} // //使用 ClassCleanup 在运行完类中的所有测试后再运行代码 //[ClassCleanup()] //public static void MyClassCleanup() //{ //} // //使用 TestInitialize 在运行每个测试前先运行代码 //[TestInitialize()] //public void MyTestInitialize() //{ //} // //使用 TestCleanup 在运行完每个测试后运行代码 //[TestCleanup()] //public void MyTestCleanup() //{ //} // #endregion /// <summary> ///maxSubArray 的测试 ///</summary> [TestMethod()] public void maxSubArrayTest1() { Program test = new Program(); int[] A = { -2, 5, 3, -6, 4, -8, 6 }; Assert.AreEqual(test.maxSubArray(A, A.Length), 8); } [TestMethod()] public void maxSubArrayTest2() { Program test = new Program(); int[] A = { 0, 0, 0 }; Assert.AreEqual(test.maxSubArray(A, A.Length), 0); } [TestMethod()] public void maxSubArrayTest3() { Program test = new Program(); int[] A = { -2 }; Assert.AreEqual(test.maxSubArray(A, A.Length), -2); } [TestMethod()] public void maxSubArrayTest4() { Program test = new Program(); int[] A = { -6,-5,-4,-3}; Assert.AreEqual(test.maxSubArray(A, A.Length), -3); } [TestMethod()] public void maxSubArrayTest5() { Program test = new Program(); int[] A = { -2,5,3,-6,10,-8,6 }; Assert.AreEqual(test.maxSubArray(A, A.Length), 12); } } }
测试结果为:

从结果可以看出,该测试用例都通过测试。
三、效能分析
1.什么是效能分析
效能分析,指对某种事物或系统执行某一项任务结果或者进程的质量好坏、作用大小、自身状态等效率指标的量化计算或结论性评价。效能是指系统在规定条件下达到规定使用目标的能力。“规定的条件”指的是环境条件、时间、人员、使用方法等因素;“规定使用目标”指的是所要达到的目的;“能力”则是指达到目标的定量或定性程度。
2.jprofiler实现
JProfiler是一个商业授权的Java剖析工具,它把CPU、执行绪和内存的剖析组合在一个强大的应用中,可提供许多IDE整合和应用服务器整合用途。
遍历:

cpu视图:

线程视图:
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

浙公网安备 33010602011771号