Java算法-求最大和的子数组序列
2024-10-02 03:20:31
问题:有一个连续数组,长度是确定的,它包含多个子数组,子数组中的内容必须是原数组内容中的一个连续片段,长度不唯一,子数组中每个元素相加的结果称为子数组的和,现要求找出和最大的一个子数组。
具体算法如下:
方法一(最优算法):分治法
import java.util.Scanner;
public class Second { public static void main(String[] args) {
// TODO Auto-generated method stub Scanner sc=new Scanner(System.in);
System.out.println("输入数组长度");
int n=sc.nextInt();
System.out.println("输入数组数据(用空格分开)");
int i;
int a[]=new int[n];
for(i=0;i<n;i++)
a[i]=sc.nextInt(); int begin=0;//子数组开始下标
int end=0;//子数组结束下标
int maxValue=a[0];
int tempValue=maxValue; //for循环寻找最大和的连续子数组
for(i=1;i<n;i++)
{
tempValue+=a[i];
if((tempValue>a[i])&&(tempValue>maxValue))
{
end=i;
maxValue=tempValue;
} else if(tempValue<=a[i])
{
begin=i;
end=i;
tempValue=a[i]; }
} //输出最大和的连续子数组的相关信息
System.out.println("最大子数组和为:"+maxValue+"\n子数组内容为:");
System.out.println("下标:");
for(i=begin;i<=end;i++)
System.out.print(i+" ");
System.out.println("\n"+"下标对应数值:");
for(i=begin;i<=end;i++)
System.out.print(a[i]+" "); } }
最新文章
- 【bzoj3884】 上帝与集合的正确用法
- 匈牙利命名法,骆驼命名法(camel),帕斯卡(Pascal)命名法(转)
- 隐藏vbs执行cmd命令的窗口
- 进程间通信和同步:pipe、FIFO、消息队列、信号量、共享内存、信号
- OpenStack Cinder组件支持的块存储设备表
- 【无聊放个模板系列】BZOJ 3172 (AC自动机)
- MessageFormat类别:快速格式化字符串
- BZOJ 3379: [Usaco2004 Open]Turning in Homework 交作业
- [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 平均值 vs 百分比
- orderBy新写法
- YApi二次开发环境部署
- Android SDK Mirror
- Unix/Linux进程间通信
- priority todo
- 暂时关闭 windows 病毒防护
- input type=";number"; 时 maxlength不起作用
- Java基础七(Eclipse工具)
- 5、redis之使用spring集成commons-pool
- CP2102
- Windows下Linux 环境 Cygwin安装及配置 基本工具使用