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;
} }
实验截图:
java-四则运算-四的更多相关文章
- Java的四种内部类
Java的四种内部类包括如下: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法 ...
- Java实验四
20145113 Java实验四 快捷键 之前没怎么记ISDEA的快捷键,但是熟练使用快捷键可以带来很多的便利,于是先开始学习一些常用的快捷键,就采用它默认的快捷键,这样后期就不会出现冲突,一些and ...
- Java中四种引用:强、软、弱、虚引用
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...
- java中四种引用类型
java中四种引用类型 今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...
- 《Thinking In Java第四版》拾遗
<Thinking In Java第四版>拾遗 转自我的github(http://katsurakkkk.github.io/2016/05/Thinking-In-Java%E7%AC ...
- Java第四次上课博文动手动脑
Java第四次上课博文动手动脑 1. 查看String.equals()方法 public class StringEquals { /** * @param args the command ...
- Java进阶(四十七)Socket通信
Java进阶(四十七)Socket通信 今天讲解一个 Hello Word 级别的 Java Socket 通信的例子.具体通讯过程如下: 先启动Server端,进入一个死循环以便一直监听某端口是 ...
- Java进阶(四十三)线程与进程的区别
Java进阶(四十三)线程与进程的区别 1.线程的基本概念 概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必 ...
- Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式
Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...
- Java进阶(四十)Java类、变量、方法修饰符讲解
Java进阶(四十)Java类.变量.方法修饰符讲解 Java类修饰符 abstract: 将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. final: 将一个类生命为最终(即非继承类) ...
随机推荐
- 剑指Offer——重建二叉树
题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...
- myeclipse部署web项目部署按钮无效
找到MyEclipse的工作路径,我的是“E:\Java”,到这个目录中去“\.metadata\.plugins\org.eclipse.core.runtime\.settings”找一个含有de ...
- 转!java web项目 build path 导入jar包,tomcat启动报错 找不到该类
在eclipse集成tomcat开发java web项目时,引入的外部jar包,编译通过,但启动tomcat运行web时提示找不到jar包内的类,需要作如下配置,将jar包在部署到集成的tomcat环 ...
- 我的Android进阶之旅------>android Button上面的英文字符串自动大写的问题解决
今天碰到一个关于Button的问题:android Button上面的英文字符串会自动变成大写,运行的Android 5.1版本,如下图所示: 图1:Button 图2:TextView 这个Butt ...
- MySQL(多表的表记录的查询)
一.外键约束 1.创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMAR ...
- atitit.client连接oracle数据库的方式总结
client连接oracle数据库的方式总结 文件夹 Java程序连接一般使用jar驱动连接.. ... 桌面GUI一般採取c语言驱动oci.dll 直接连接... 间接连接(须要配置tns及其env ...
- django(python manage.py migrate)同步数据库出错后的解决办法
执行python manage.py migrate同步数据库前一次执行 python manage.py makemigrations 时生成的文件及之后所有的文件删除即可,然后修改models.p ...
- image_Magic
http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html mogrify -sample 25% *.jpg 批量处理图片 conv ...
- Python框架之Tornado(源码之褪去模板外衣的前戏)
执行字符串表示的函数,并为该函数提供全局变量 本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了.废话不多说,直接上代码: # ...
- html 基础 表单
一.表单 <form id="" name="" method="post/get" action="负责处理的服务端&qu ...