java一维数组作业

package zuoYe;

import java.util.Scanner;

public class MaxSubArray {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        //输入数据
        System.out.println("请输入数组长度");
        int n = scan.nextInt();
        int[] a = new int[n];

        System.out.println("请输入数组元素");
        for(int i = 0;i < n;i++)
        {
            a[i] = scan.nextInt();
        }
        scan.close();
        //计算此数组的和最大的连续子数组
        int[] result = maxSub(a,a.length);
        System.out.println("不连接成环的和最大的连续子数组:");
        for(int i = result[0];i <= result[1];i++)
        {
            System.out.print(a[i] + "\t");
        }
        System.out.println("和为:" + result[2]);

        //将此数组连成一个环,再计算此数组的和最大的连续子数组
        //连成一个环即将数组后再接上此数组,但是数组的最后一个元素不用接,相当于计算接上之后的数组的和最大子数组
        int[] b = new int[2 * n - 1];
        for(int i = 0;i < n - 1;i++)
        {
            b[i] = a[i];
            b[n + i] = a[i];
        }
        b[n - 1] = a[n - 1];
        int[] result2 = maxSub(b,n);
        System.out.println("\n\n将数组连成环后的和最大的连续子数组:");
        for(int i = result2[0];i <= result2[1];i++)
        {
            System.out.print(b[i] + "\t");
        }
        System.out.println("和为:" + result2[2]);

    }

    //计算a数组的和最大的连续子数组(a数组为连成环后的等价数组,即原数组的二倍,n为原数组的长度)
    public static int[] maxSub(int[] a,int n)
    {
        int an = a.length;//连成环的等价数组的长度
        int currectSum = a[0];//记录当前累加和,初始值为a[0]
        int currectStartIndex = 0;//记录当前累加的起始下标,初始值为0
        int count = 1;//记录累加元素的个数,初始值为1
        int[] result = new int[3];//记录结果子数组的信息,
        result[0] = 0;//结果子数组的开始下标
        result[1] = 0;//结果子数组的结束下标
        result[2] = a[0];//结果子数组的和
        for(int i = 1;i < an;i++)//依次遍历a数组的每个元素
        {
            if(currectSum <= 0)//如果当前累加和不大于0,不大于0对后续的元素没有贡献,可以去掉了,所以应从a[i]处重新开始加
            {
                currectSum = a[i];//将当前累加和赋值为a[i]
                currectStartIndex = i;//将当前累加的开始下标赋值为i
                count = 1;//将累加元素的个数记为1
            }
            else//当前累加和大于0,则继续加a[i]
            {
                currectSum += a[i];
                count++;//当前累加元素的个数加一
            }
            if(currectSum > result[2])//如果当前累加和大于原结果数组的累加和result[2],则应该将结果子数组信息更新为当前子数组,因为当前子数组的累加和大于结果子数组的和
            {
                result[0] = currectStartIndex;//结果子数组的开始下标为当前子数组的开始下标
                result[1] = i;//结果子数组的结束下标赋值为i
                result[2] = currectSum;//结果子数组的累加和赋值为当前子数组的累加和
            }
            if(count >= n)//如果累加的元素个数等于原数组(未连成环的数组)的长度,则说明已经加了最多的元素,不能再加了,也就是说和最大的子数组即为原数组,应该结束循环
            {
                break;
            }
        }
        return result;
    }

}

实验截图:

时间: 2024-08-08 09:28:20

java一维数组作业的相关文章

&nbsp; 我的java学习 の 数组作业

  class 数组作业{/********1.1永远在第一行的中间: 2.下一个数,永远填在右上角: 3.若右上角没位置了,要转头(两种情况) 4. 若遇到n的倍数,一个数,直接填在它的下方. ********/public static void main(String[] args){ int n=11; int[][] a= new int[n][n]; int i=0; int j=n/2; a[i][j]=1; for(int k=2; k<=n*n;k++){ if(a[i][j]

【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)

目录 视频讲解: 一.数组的概述 二.一维数组的使用 三.Arrays工具类中的sort方法(sort方法用的多,我们具体讲一下) 四.数组中的常见异常 五.一维数组练习题 六.彩蛋(本期视频使用的PPT+[练习题(带答案和详解)]) [新手友好型视频]全面讲解Java一维数组(内含带答案和讲解的练习题彩蛋喔)看完即上手!更有详解版练习题来帮你加深印象~~ 视频讲解: 点击这里即可到小乔的B站观看 一.数组的概述 数组(Array),是存储一系列同类型数据元素的一种数据结构.它通过数组名和一个整

JAVA一维数组

import java.applet.Applet; import java.awt.*; //用*表示包含awt这个源包下的所有方法成员,awt为图形界面设计包 public class Applet_Example extends Applet{ int a[]; //定义一个一维数组 public void init(){ a=new int[5]; //定义一个一维数组,该数组包含5个元素 a[0]=100; //分别对数组元素赋值 a[1]=101; a[2]=102; a[3]=10

java一维数组学习

/* * java学习: * 一维数组的使用: 声明语法 DataType[] name 或 DataType name[]. 初始化语法 DataType[] name = new DataType[length]. DataType[] name = new DataType[] { element1, element2, ...elementn }. DataType[] name = { element1, element2, ...elementn }. Java中使用关键字new创建

6.Java一维数组的声明、初始化和引用

一维数组的声明 使用一个数据时,必须要对其进行声明,这个道理对于数组来说也一样,数组在使用之前也必须先声明.先看下面的代码,是如何声明一个变量的.     int a; 仔细分析一下:int 是指变量的数据类型,a 是指变量名,由变量的声明可以联系到数组的声明.     int a[]; 仔细分析一下:int 是指数组中所有数据的数据类型,也可以说是这个数组的数据类型,a[]表示数组名. 基本类型数组的声明有几种形式:     int a[];     int[] a; 这两种形式没有区别,使用

Java.一维数组

一位数组的初始化(两种方法) 数组类型 数组明[]={值1,值2,值3......值n}: 数组类型 数组名[]=new 数据类型[常量值] //这种方法会给所有的数组元素赋予同一个默认值,对数值类型来说,默认值也是0 1.数组的遍历 除了for循环,比较简单的是for-each语句:                 格式:for(类型   变量名:数组)       类型:任何数据类型:数组:定义的数组名 {语句} public class bianli { public static voi

java一维数组的冒泡排序

/* 冒泡排序算法: int类型的数组:3 1 6 2 5 */ public class BubbleSort{ public static void main(String[] args){ int[] a = {3,1,6,2,5}; //开始排序 for(int i=a.length-1;i>0;i--){ for(int j=0;j<i;j++){ if(a[j]>a[j+1]){ //交换位置 int temp; temp = a[j]; a[j] = a[j+1]; a[j

java一维数组的定义、声明及排序

public class TestArray { public static void main(String[] args) { /** 数组声明及动态初始化 int a[] = new int[args.length]; for (int i=0;i<args.length;i++){ a[i] = Integer.parseInt(args[i]); } **/ //静态初始化 int a[] = {9,8,1,3,7,5,4,2,6}; print(a); bubbleSort(a);

java数组(一维数组,二维数组)

数组初始化: 1,动态初始化:数组定义与为数组分配空间和赋值的操作分开进行 2,静态初始化:在定义数组的同时就为数组元素分配空间并赋值 3,默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此,数组分配空间之后 每个元素也被按照成员的规则被隐士的初始化值 ------------------------------------------------. 一维数组: package day06; import java.util.Date; /*** * 数组演示 * 数组的声明: * t