import java.util.List;
import java.util.ArrayList;
public class IntArray
{
//这是整型数组类(IntArray)的数据成员 ,即一个整型数组
public int[] data;
//此类的构造函数法
public IntArray(int[] a)
{
data = a;
}
//打印数组,每十个一行
public void printArray()
{
int i = 0;
for (int j: data)
{
System.out.println(" " + j);
i++;
if (i % 10 == 0)
System.out.println();
}
}
//给定一个整数数组,从中切出一个连续片段,保证其元素和最大
public ArraySession sliceMax()
{
int dataLength = this.data.length;//缓存数组长度
//判断数组内是否有正整数,如果没有返回最大的非正数
int flag = 0;
for (int i = 0; i < dataLength; ++i)
{
if (data[i] > 0)
break;
++flag;
}
if (flag == dataLength)
{
int max1 = data[0], index = 0;
for (int i = 0; i < dataLength; ++i)
{
if (data[i] >= max1)
{
max1 = data[i];
index = i;
}
}
return new ArraySession(index, index, max1);//全为非正数时,一定从这一句返回。
}
//下面是对数组内有正整数的情况考虑的
List<ArraySession> node = new ArrayList<ArraySession>();
for (int start = 0; start < dataLength; start++)
{
if (data[start] <= 0 || start != 0 && data[start - 1] > 0)
continue;//起始点是非正数的或者前一个数是正数的,肯定不是最大序列,继续下一轮
for (int end = start; end < dataLength; end++)
{
//System.out.println((data[end] <= 0 || end < dataLength -1 && data[end + 1] > 0));
if (data[end] <= 0 || end < dataLength -1 && data[end + 1] > 0)//先判断这个数是否为非正,再看下一个是否为正
continue;//终止点是非正数的或者 下一个点是正数的,肯定不是最大序列,继续下一轮
int sum = 0;
for (int k = start; k <= end; k++)
{
sum = sum + data[k];
}
//System.out.println(start+"---"+end+"---sum:"+sum);
node.add(new ArraySession(start, end, sum));
}
}
int max2 = node.get(0).sum;
ArraySession result=null;
for(ArraySession i:node)
{
if (max2 <= i.sum)//此处的等于很重要
{
max2 = i.sum;
result = i;
}
}
return result;
}
}
public class ArraySession
{
public int start;
public int end;
public int sum;
//构造函数
public ArraySession(int start, int end, int sum)
{
this.start = start;
this.end = end;
this.sum = sum;
}
//打印此段的基本信息
public void sessionPrint()
{
System.out.println("此段的开端索引值为:start="+start);
System.out.println("此段的结尾索引值为:end="+end);
System.out.println("此段的元素之和为:sum="+sum);
}
}
public class MainClass
{
//主函数 ,程序的入口点 ,此类主要用作调试函数
public static void main(String[] args)
{
//int[] array ={ -1, 3, -1, -2, 1, -1, 5, -6,-7, -8 };
//new IntArray(new Mathlet().arrayMultiMax(array)).printArray();
//Console.WriteLine(new Mathlet().triFibonacci(BasicFunctions.intInput("请输入一个整数")));
//Console.ReadKey();
//new ArraySession(1, 2, 3).sessionPrint();
int[] array = { 1, -7, 0, 2, -3, 4, -2, 6, -7, -8 };
new IntArray(array).sliceMax().sessionPrint();
}
}
注:本代码是本人的java改进版,源代码为C#的 参考 牟盖东 先生的!
分享到:
相关推荐
亚信笔试题!!!!!亚信笔试题!!!!!亚信笔试题!!!!!亚信笔试题!!!!!亚信笔试题!!!!!亚信笔试题!!!!!
大唐移动笔试题,不错很全!想要的下载吧!
千橡笔试题 人人笔试题!千橡笔试题 人人笔试题!千橡笔试题 人人笔试题!千橡笔试题 人人笔试题!千橡笔试题 人人笔试题!
淘宝2011年笔试题淘宝2011年笔试题淘宝2011年笔试题淘宝2011年笔试题
汇集各大企业的Linux笔试题,非常棒 今天在网上看见这篇文章,感觉很好,自己正在看,大家有时间可以看看,估计有帮助。
有史以来最全的C语言笔试面试题!!!足足有200多页!!!
好东西,江苏省电信2005年的招聘笔试题,有一定参考价值的
很不错的淘宝2011年笔试题 很不错的淘宝2011年笔试题很不错的淘宝2011年笔试题 很不错的淘宝2011年笔试题 很不错的淘宝2011年笔试题 很不错的淘宝2011年笔试题
c语言笔试,有2005-2006年,望大家考个好成绩,谢谢
考试题,可以参考。CCIE是人们的梦想,但是我们重点要通过这些题目来学习知识。
2011淘宝笔试2011淘宝笔试2011淘宝笔试
中兴笔试题目!!!!!中兴笔试题目!!!!!中兴笔试题目!!!!!中兴笔试题目!!!!!中兴笔试题目!!!!!
相关华为软件测试笔试题,其中很多题目都是很经典的!快来下载吧
国家电网校招笔试练习题!
java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 ...
C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....
C++笔试题 Sony笔试题 几道题目及自做答案 北电 普天C++笔试题 我所收集的intel比试题 面试题 2005年腾讯招聘 微软 微软亚洲技术支持中心面试题目 微创笔试题目(微创,...上海聚力传媒技术有限公司官方VC笔试题解答
自地球诞生以来最全的C语言笔试面试题!将近有250页的word文档!
淘宝2010,淘宝2011,淘宝2012校园招聘笔试题
大连华信去年的笔试题,可以给各位即将工作的同学一些参考