求解数组环中最大子数组和的问题(java)
//石家庄铁道大学 信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)的更多相关文章
- nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...
- 求一个数组的最大子数组(C/C++实现)
最大子数组:要求相连,加起来的和最大的子数组就是一个数组的最大子数组.编译环境:VS2012,顺便说句其实我是C#程序员,我只是喜欢学C++. 其实这是个半成品,还有些BUG在里面,不过总体的思路是这 ...
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 蚂蚁的难题(二)首尾相连数组的最大子数组和(DP)
蚂蚁的难题(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种食材 ...
- nyoj983 首尾相连数组的最大子数组和
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...
- NYOJ 745 首尾相连数组的最大子数组和
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...
- nyoj--983--首尾相连数组的最大子数组和(动态规划)
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...
- 求二维数组的最大子数组———曹玉松&&蔡迎盈
继上节课老师让求了一维数组最大的子数组后,这节课堂上,老师加深了难度,给了一个二维数组,求最大子数组,开始觉得很容易,但是自己思考起来感觉这个算法很困难,既需要考虑数组直接的连续,又要求出最大的,老师 ...
- [Jobdu] 题目1527:首尾相连数组的最大子数组和
题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr ...
随机推荐
- paper 38 :entropy
图像熵计算 真是为了一个简单的基础概念弄的心力交瘁,请教了一下师姐,但是并没有真的理解,师弟我太笨呀~~所以,我又查熵的中文含义和相关的出处!共勉吧~~ 1.信息熵: 利用信息论中信息熵概念,求出任意 ...
- 解决无法连接到visual studio开发服务器的问题
今天vs抽风,调试网站出现下图那样: 然后我开始百度搜索 "无法连接到visual studio开发服务器" 出现很多文章: 打开一篇问题,看了里面的内容, 那个解决办法也不是最好 ...
- windows下nginx和php环境的配置
至于php的配置,与之前博文中使用apache服务器时一样. 对于nginx的配置,来看看如何修改配置文件: #user nobody; worker_processes ; #error_log l ...
- expandlistview
package com.exaple.zhonghe2; import java.sql.SQLData;import java.util.ArrayList;import java.util.Has ...
- 鸟哥的linux私房菜学习记录之档案与目录管理
绝对路径和相对路径 绝对路径就是从根目录到某个目录下的路径,从根目录写起,也就是/ 相对路径就是从用户当前目录的路径写起 目录相关操作 cd 切换路径 例如:cd /var/www 切换到/var/w ...
- linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59416.html linux设备驱动归纳总结(三):1.字符型设备之设备申请 操作系统:Ubunru ...
- 160902、Ionic、Angularjs、Cordova搭建Android开发环境
1.jdk 环境变量配置 path:C:\Program Files\Java\jdk1.7.0_79\bin 2.node.js 因为安装cordova时要用到node.js的npm 下载地址: h ...
- Android中Base64的简单使用
服务端图片的信息被转化成字符串,传到android客户端,android端需要把这些信息再解码转化成图片并保存在本地. //编码部分 String string = Base64.encodeToSt ...
- Oracle通过sqlplus spool导入导出数据
第一部分(实例,主要分两步),第二部分(参数小总结),第三部分(完全参数总结) 第一部分 第一步 :这是我的导出数据的脚本call.sqlconn scott/tigerset echo offset ...
- PHP编写的图片验证码类文件分享方法
适用于自定义的验证码类! <?php/* * To change this license header, choose License Headers in Project Propertie ...