题目1527:首尾相连数组的最大子数组和
2013-12-30 22:21
309 查看
import java.util.Scanner; import java.io.IOException; import java.io.FileReader; import java.io.BufferedReader; class Main { private final static boolean DEBUG = false; public static void main(String[] args) throws IOException { Scanner cin; int n; int[] a; if (DEBUG) { cin = new Scanner(new BufferedReader(new FileReader("d:\\OJ\\uva_in.txt"))); } else { cin = new Scanner(System.in); } while (cin.hasNext()) { n = cin.nextInt(); a = new int ; for (int i = 0; i < n; i++) { a[i] = cin.nextInt(); } int sum1, min; sum1 = min = a[0]; int index = 0; for (int i = 1; i < n; i++) { if (sum1 < 0) { sum1 += a[i]; } else { sum1 = a[i]; } if (sum1 < min) { min = sum1; index = i; } } int[] sum = new int ; int max = sum[(index + 1) % n] = a[(index + 1) % n]; for (int i = 2; i < n; i++) { int prev = (index + i - 1) % n; int cur = (index + i) % n; if (sum[prev] > 0) { sum[cur] = sum[prev] + a[cur]; } else { sum[cur] = a[cur]; } max = Math.max(max, sum[cur]); } int b, sum2; b = sum2 = a[0]; for (int i = 1; i < n; i++) { if (sum2 > 0) { sum2 += a[i]; } else { sum2 = a[i]; } if (sum2 > b) { b = sum2; } } if (b > max) max = b; if (max < 0) max = 0; System.out.println(max); } } }
相关文章推荐
- 修改cas登陆页面-服务器端
- Easyui 项目展示
- JavaWeb -- sevlet 监听器
- 修改cas登陆页面-服务器端
- JavaWeb -- sevlet 监听器
- java集合类
- 编程乐趣:C#中按字符串截取长字符串
- 获取本地网卡适配器信息
- 哈夫曼编码-数据结构实验
- Linux(centos)系统各个目录的作用详解
- [SharpMap] 屏幕坐标和Map坐标转换
- 基于感知Hash算法的视觉目标跟踪
- Java学习——面对对象的思想入门
- 利用expect脚本结合bash脚本批量修改主机名
- WITH AS and materialize hints
- Android打开应用程序安装界面
- 初识Mapr(三)——规划集群
- WITH AS and materialize hints
- web.xml的说明
- Linux系统下如何查看及修改文件读写权限