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;
} }

实验截图:

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

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

    目录 视频讲解: 一.数组的概述 二.一维数组的使用 三.Arrays工具类中的sort方法(sort方法用的多,我们具体讲一下) 四.数组中的常见异常 五.一维数组练习题 六.彩蛋(本期视频使用的P ...

  2. 061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结

    061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结 本文知识点:一维数组总结 总结 注意点

  3. 060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序

    060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序 本文知识点:冒泡排序 冒泡排序 实际案例分析冒泡排序流程 第1轮比较: 第1轮比较的结果:把最 ...

  4. 059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环

    059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环 本文知识点:增强型for循环 增强型for循环格式 案例练习增强型for循环 数组名字 ...

  5. 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值

    058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...

  6. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  7. 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用

    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...

  8. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

  9. 054 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 01 数组概述

    054 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 01 数组概述 本文知识点:数组概述 为什么要学习数组? 实际问题: 比如我们要对学生的成绩进行排序,一个班级 ...

随机推荐

  1. java System类的一些静态方法

    package cn.sasa.demo2; public class SystemDemo { public static void main(String[] args) { func_array ...

  2. kali蓝牙连接

    http://blog.csdn.net/hailangnet/article/details/47723181 http://www.aiuxian.com/article/p-3012084.ht ...

  3. Python字符串拼接的6种方法

    如有其他字符串拼接方法 欢迎留言提出哦 (示例版本为Py2) 1. 加号 第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接用 “+” 来连接两个字符串 ...

  4. redis设置bind

    1>注释掉bind #bind 127.0.0.1 2>默认不是守护进程方式运行,这里可以修改 daemonize no 3>禁用保护模式 protected-mode no 启动R ...

  5. JavaScript学习笔记--语言工具的了解

    基础学习,快速入门资料:网站 https://www.liaoxuefeng.com ,http://www.runoob.com/js/js-tutorial.html 笔记: 编程工具:SubLi ...

  6. vivado SDK之找不到"platform.h"

    解决方法:建工程的时候不要选择empty application,而是选择hello  world,里面会自动包含platform.c,platform.h等. 另外,常用的xgpio.h头文件有时候 ...

  7. (4.6)mysql备份还原——深入解析二进制日志(2)binlog参数配置解析

    关键词:binlog配置,binlog参数,二进制日志配置,二进制文件参数配置 关键词:binlog缓存,binlog 刷新 0.bin写入流程 写binlog流程如下:# 数据操作buffer po ...

  8. laravel项目thinksns+安装pc前端页面

    前面我们说了laravel项目ThinkSNS+安装,现在要安装给用户看的页面,方便他们进行一些操作,比如发表文字/提问之类,这个已经模块化了,用composer就可以完成.命令行代码如下(之前是co ...

  9. mysql数据库数据(字段数过大)太多导入不了的解决方法

    mysql数据库数据(字段数过大)太多导入不了的决方法: 1.打开navicat 工具 2.在数据库上右键,执行右键菜单命令“命令列界面” 3.在打开的窗口中,运行set global max_all ...

  10. Python字符串切片

    1.字符串切片:从字符串中取出相应的元素,重新组成一个新的字符串 语法: 字符串[    开始元素下标  :  结束元素下标  :  步长     ]   # 字符串的每个元素都有正负两种下标 步长: ...