问题:有一个连续数组,长度是确定的,它包含多个子数组,子数组中的内容必须是原数组内容中的一个连续片段,长度不唯一,子数组中每个元素相加的结果称为子数组的和,现要求找出和最大的一个子数组。

具体算法如下:

方法一(最优算法):分治法

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]+" "); } }

  

最新文章

  1. 【bzoj3884】 上帝与集合的正确用法
  2. 匈牙利命名法,骆驼命名法(camel),帕斯卡(Pascal)命名法(转)
  3. 隐藏vbs执行cmd命令的窗口
  4. 进程间通信和同步:pipe、FIFO、消息队列、信号量、共享内存、信号
  5. OpenStack Cinder组件支持的块存储设备表
  6. 【无聊放个模板系列】BZOJ 3172 (AC自动机)
  7. MessageFormat类别:快速格式化字符串
  8. BZOJ 3379: [Usaco2004 Open]Turning in Homework 交作业
  9. [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 平均值 vs 百分比
  10. orderBy新写法
  11. YApi二次开发环境部署
  12. Android SDK Mirror
  13. Unix/Linux进程间通信
  14. priority todo
  15. 暂时关闭 windows 病毒防护
  16. input type=&quot;number&quot; 时 maxlength不起作用
  17. Java基础七(Eclipse工具)
  18. 5、redis之使用spring集成commons-pool
  19. CP2102
  20. Windows下Linux 环境 Cygwin安装及配置 基本工具使用

热门文章

  1. make 的参数
  2. jquer表单序列化加强版
  3. javascript 次序li
  4. SWIFT学习笔记02
  5. 《Linux Device Drivers》第十一章 核心数据类型——note
  6. Android获取百度音乐下载音乐和歌词下载链接
  7. 正定矩阵(definite matrix)
  8. 生意经:凡是现今比较会赚钱或是规模比较大的软件公司大都属于开发&quot;消费型软件&quot;的公司(而且登广告,应该定低价进行销售)
  9. Lua学习 2) —— Android与Lua互调
  10. HQL链接查询