博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一维最大子数组和(续)
阅读量:7099 次
发布时间:2019-06-28

本文共 2151 字,大约阅读时间需要 7 分钟。

import java.util.Scanner;

public class shuzu {
public static int maxArr(int a[]) {
int max=a[0];
for(int i=1;i<a.length;i++) {
if(a[i]>max) {
max=a[i];
}
}
return max;
}
public static void main(String args[]) {
/*
* 生成数组
*/
System.out.println("请输入数组中数字个数");
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int[] array = new int[num];
System.out.println("请输入"+num+"个数值");
for(int i = 0;i < num;i++) {
array[i] = scan.nextInt();
}
int lon = ((1+num)/2+1)*num;//存放所有子数组和的 数组
int[] sum = new int[lon];
int sumchangdu = 0;
int sumchangdu1 = 0;
/*求所有子数组的和 放进sum数组中*/
int[] maxarr = new int[num];//存放子数组和最大值的所有组成元素的数组
for(int i = 0;i < num;i++) {
int[] arr = new int[num];//存放当前子数组和的所有组成元素的数组
int asum = 0;
int changdu = 0;
for(int j = 0; j < num - i;j++) {
arr[changdu] = array[i+j];
asum = asum + array[i+j];
sum[sumchangdu] = asum;
sumchangdu1 = sumchangdu+1;
System.out.println("当前执行第"+sumchangdu1+"步");
System.out.println("第"+ sumchangdu1 +"个子数组和为:"+sum[sumchangdu]);
System.out.print("当前组成当前的子数组和的元素为:");
for(int y = 0; y < arr.length;y++) {
if(arr[y]!=0)
System.out.print(arr[y]+" ");
}
System.out.println("");
if(sum[sumchangdu]==maxArr(sum)) {
for(int k =0; k < arr.length;k++)
maxarr[k] = arr[k];
}
System.out.println("当前"+ sumchangdu1 +"个子数组和的最大值为:"+maxArr(sum));
System.out.print("当前组成最大子数组和的元素为:");
for(int x =0;x < maxarr.length;x++ ) {
if(maxarr[x]!=0)
System.out.print(maxarr[x]+" ");
}
System.out.println("");
System.out.println("输入0键开始执行下一步");
int x = scan.nextInt();
if(x==0) {
System.out.println("--------------------------------------------");
sumchangdu++;
changdu++;
}
else {
System.out.println("输入有误,程序退出!");<br> System.exit(0);
}
}
}
scan.close();
int max = sum[0];
for(int m = 1; m < lon;m++) {
if(sum[m]>max) //求sum数组最大的值
max = sum[m];
}
System.out.println("最大子数组和为:"+max);//输出最大的子数组和
}
}

要求:求一个一维数组的最大子数组和,并要求逐步实现,显示执行第几步,当前所处理的元素,当前子数组和,当前最大子数组和以及最大子数组和所组成的元素

思路:定义int[] maxarr = new int[num];//存放子数组和最大值的所有组成元素的数组,int[] arr = new int[num];//存放当前子数组和的所有组成元素的数组,双层for循环实现,用方法public static int maxArr(int a[])判断当前所存储的子数组和是否为最大的子数组,如果是则存储,不是则继续利用上一个最大的子数组和的数组。

 

转载于:https://www.cnblogs.com/muailiulan/p/10772209.html

你可能感兴趣的文章
PostgreSQL 11 1Kw TPCC , 1亿 TPCB 7*24 强压耐久测试
查看>>
修改toolbar自适应报表宽度
查看>>
Linux基础命令---chkconfig
查看>>
企业网站需要什么样内容才能满足和吸引到用户?
查看>>
关于 Java NIO Buffer 使用的详细解读
查看>>
以太坊系列之十三: evm指令集
查看>>
9、MySQL函数
查看>>
Scala的类层级讲解
查看>>
微信api 源码分享
查看>>
博客计划【推荐系统】
查看>>
iptables杂记
查看>>
orm2 中文文档 3.1 模型属性
查看>>
雪城大学信息安全讲义 4.3~4.4
查看>>
300+参展品牌,10+同期会议,IOTE2018国际物联网展苏州开幕
查看>>
New Product Launch: Alibaba Cloud Data Integration
查看>>
人工智能玩具安全性遭质疑,刺痛了谁的神经?
查看>>
Mac系统下利用ADB命令连接android手机并进行文件操作
查看>>
修改Windows和linux系统时间
查看>>
深入VR教育乱象,教育部和工信部召开研讨会
查看>>
深入分析Spring 与 Spring MVC容器
查看>>