//石家庄铁道大学    信1405-1 班   唐炳辉  

在上一次作业中,对于普通数组的最大子数组的求解问题的基础上,将普通的数组变成一个首尾相接的环,求这个环的最大子数组。类似的,只要改变普通数组的数组位置,在依次进行求解就行了 。。。例如

        给定你一个数组   -1  2  -5  6  7    让你求这个环的 最大 子数组,,可以用下边这个函数来实现转化,,具体转化完,就生成五个新的数组,分别问

                -1 2 -5 6 7
                2 -5 6 7 -1
                -5 6 7 -1 2
                6 7 -1 2 -5
                7 -1 2 -5 6   

这样对这几个数组分别求出他们中的最大子数组,再找出所有中的最大子数组即可

   核心函数

 int Arr1[]=new int [flase0g];
for(int i =0;i<flase0g;i++)
{
for(int y=0;y<flase0g;y++)
{
Arr1[y]=Arr[(y+i)%(flase0g)];
} MAX=f.findMaxArr(Arr1); if(MAX>MAX1)
{
MAX1=MAX;
}
}

         下边是具体的实现代码    

 //石家庄铁道大学    信1405-1 班   唐炳辉                                              :三藏
/**给定一个数组,将这个数组首位相连,构成一个环,求出这个数组环中子数组的最大值,**/
package ZiShuZu;
import java.util.Scanner; public class HuanShuzu { public static void main(String[] args) {
HuanShuzu f = new HuanShuzu(); //用户自己定义数组的长度并 自行输入一串数组
int MAX = 0;
int MAX1=0;
Scanner in=new Scanner(System.in);
System.out.print("请输入数组长度:");
int flase0g=in.nextInt();
//输入数组中的各个数值
System.out.print("请依次输入整数:");
int Arr[]=new int[flase0g];
for(int i=0;i<flase0g;i++)
{
Arr[i]=in.nextInt();
}
//输出用户输入的数组
System.out.print("您输入的数组环为 ");
for(int i=0;i<flase0g;i++)
{
System.out.print(Arr[i]+" ") ;
}
System.out.println(" ") ;
int Arr1[]=new int [flase0g];
for(int i =0;i<flase0g;i++)
{
for(int y=0;y<flase0g;y++)
{
Arr1[y]=Arr[(y+i)%(flase0g)];
} MAX=f.findMaxArr(Arr1); if(MAX>MAX1)
{
MAX1=MAX;
}
} //双重数组
System.out.print("最大的数组为"+MAX1); //输出最后的结; } public int findMaxArr(int[] arr) {
int Arr = 0;//用来记录当前并入的数组的和
int MaxArr = 0;//用来记录之前的最大的数组和
int A = arr.length;
int Location1=0;
int Location2=0;//用来记录子数组的最后一个位置 int i; /**核心算法,两个变量 ,一个记录当前并入的数组的值,另外一个记录所算过得最大的数组的值
当并入的值为小于零的时候,就没必要进行继续的相加了,因为再加也不可能比后边单独
的数字大,所以,为负数就重新刷新位置,重置子数组的长度重新去找一个新的子数组**/
for ( i = 0; i < A; i++) {
Arr += arr[i];
if (Arr < 0) {
Arr = 0; }
if (Arr > MaxArr) {
MaxArr = Arr;
Location2=i;
;
}
} //用这个算法,通过最后的位置,和最大值来求出起始位置
for(i=Location2;i>=0;i--)
{
if(MaxArr-arr[i]==0)
{
Location1=i;//通过求出来的最大值和最后的那个位置,往前推移,找出起始位置
break;//跳出循环
} }
/**这种情况的出现当且仅当全部的数字都为负数的时候,
对所有的数字求一个最大值就是最大子数组**/
if (MaxArr == 0) {
for ( i = 0; i < A; i++) { if (i == 0) {
MaxArr = arr[i];
}
if (arr[i] > MaxArr) {
MaxArr = arr[i];
}
}
}
//*************** return MaxArr; }
}

实验截图

求解数组环中最大子数组和的问题(java)的更多相关文章

  1. nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...

  2. 求一个数组的最大子数组(C/C++实现)

    最大子数组:要求相连,加起来的和最大的子数组就是一个数组的最大子数组.编译环境:VS2012,顺便说句其实我是C#程序员,我只是喜欢学C++. 其实这是个半成品,还有些BUG在里面,不过总体的思路是这 ...

  3. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

  4. 蚂蚁的难题(二)首尾相连数组的最大子数组和(DP)

    蚂蚁的难题(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种食材 ...

  5. nyoj983 首尾相连数组的最大子数组和

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...

  6. NYOJ 745 首尾相连数组的最大子数组和

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...

  7. nyoj--983--首尾相连数组的最大子数组和(动态规划)

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...

  8. 求二维数组的最大子数组———曹玉松&&蔡迎盈

    继上节课老师让求了一维数组最大的子数组后,这节课堂上,老师加深了难度,给了一个二维数组,求最大子数组,开始觉得很容易,但是自己思考起来感觉这个算法很困难,既需要考虑数组直接的连续,又要求出最大的,老师 ...

  9. [Jobdu] 题目1527:首尾相连数组的最大子数组和

    题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr ...

随机推荐

  1. java 网络编程(四)----UDP进阶篇聊天小程序

    设计要求:单线程模式,客户端只发送数据,数据的来源为键盘录入,服务器端只接收数据,当客户端发送886的时候,客户端和服务器端都退出. 1. 发送端: public class Send impleme ...

  2. java 网络编程(二)----UDP基础级的示例

    下面介绍UDP基础级的代码示例: 首先了解创建UDP传输的发送端的思路: 1.创建UDP的Socket服务.2.将要发送的数据封装到数据包中.3.通过UDP的socket服务将数据包发送出去.4.关闭 ...

  3. Ubuntu + CentOS7 搭建tftp Server

    基于Ubuntu系统做的tftp服务器,基于CentOS 7都差不多,书写了关键命令,测试过Ubuntu 12.0.4 和CentOS 7环境 1.介绍tftp服务器     TFTP(Trivial ...

  4. Openstack的mysql数据多主galera的错误

    登录openstack的在dashboard,提示说权限验证错误,有2种情况: 1. 密码被人改了. 2. 系统发生了问题. 密码确认没人改,所以查看/var/log/keystone-all.log ...

  5. UIActivityViewController(转)

    在iOS 6之后提供了一个分享列表视图,它通过UIActivityViewController管理.苹果设计它主要的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选 ...

  6. mysql笔记05 优化服务器设置

    优化服务器设置 1. MySQL有大量可以修改的参数--但不应该随便去修改.通常只需要把基本的项配置正确(大部分情况下只有很少一些参数时真正重要的),应将更多时间花在schema的优化.索引,以及查询 ...

  7. 启用 TStringGrid 的自画功能,并避免重影

    FMX 控件的 TStringGrid 下,有时为了让不同行或不同 Cell 的显示颜色.字体等有各种不同的颜色, 必须采用自画, 即在其 OnDrawColumnCell 事件中写自己的控制代码显示 ...

  8. 161125、Java网络编程之统一资源定位符URL

    统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址.超文本链路由统一资源定位符URL维持.URL的格式是: <M ...

  9. Using Controls in a Form Design [AX 2012]

    Using Controls in a Form Design [AX 2012] This topic has not yet been rated - Rate this topic Update ...

  10. 转载WPF SDK研究 之 AppModel

    Jianqiang's Mobile Dev Blog iOS.Android.WP CnBlogs Home New Post Contact Admin Rss Posts - 528 Artic ...