课堂测试:

题目:返回一个整数数组中最大子数组的和。

要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。

package intergerarry;
import java.io.*;
import java.util.Scanner;
public class intergerarry {
    public int shuchu(int a,int l,int f[],int x)
    {
        int m[]=new int[l*(l+1)/2];
        m[0]=f[a];
        a=a+1;
        int b=1,s=0;
        for(int i=a;i<x+s;i++)//从第一位开始循环,控制循环长度
        {
            if(i==x-1)//如果循环到最后一位
            {
                
                m[b]=m[b-1]+f[i];
                i=a+s;//从原数组的下一位开始
                s++;//起始位置加1
                b++;
                m[b]=f[i];
                b++;
                
            }
            else//如果没有到最后一位
            {
            m[b]=m[b-1]+f[i];//将每一位都求和累加,求出每个子数组的和,保存在数组m中
            b++;
            }
        }
        int t=m[0];
        for(int i=1;i<l*(l+1)/2;i++)
        {
            if(t<m[i])
            {
            t=m[i];    
            }
        }
        return t;
    }
}
package intergerarry;
import java.util.*;
public class figure {
     public static void main(String[] args) {
            // TODO 自动生成的方法存根
            int f[]={1,2,-3,0,7,-8,4};//原数组
            int ff[]={1,2,-3,0,7,-8,4,1,2,-3,0,7,-8,4};//构造的循环数组。使得可以循环
            int n=7;
            int s[]=new int[n];
            intergerarry m=new intergerarry();
            int t=m.shuchu(0,2*n,ff,n);//调用类的函数,第一个参数为起始位置,第二个为数组的长度,最后一个参数原数组的长度
            System.out.println("最大子数组的和为:"+t);//输出最大值 
        }
}

在听完前几个同学的讲解然后通过观看一些学长的博客获得启发,再按照学长的思路完成本次课堂测试。

posted on 2022-03-11 19:57  辰逸1  阅读(19)  评论(0编辑  收藏  举报