package com.dongbin.test;

/**
* 最大子序列和 --分治法
*
* @author dongbin
*
*/
public class MaxSubListSum { /**
* 最大子序列的实现方法
*
* @param arr
* --数组
* @param left
* @param right
* @return
*/
public static int maxsubListSum(int arr[], int left, int right) { if (left == right) {// arr.length==1
if (arr[left] > 0) {
return arr[left];
} else {
return 0;
}
} // 划分数组
int center = (left + right) / 2;
int maxLeftSum = maxsubListSum(arr, left, center);// 左边最大值
int maxRightSum = maxsubListSum(arr, center + 1, right);// 右边最大值 // 左边求和
int maxLeftBorderSum = 0, leftBorderSum = 0;
for (int i = center; i >= left; i--) {
leftBorderSum += arr[i];
if (leftBorderSum > maxLeftBorderSum) {
maxLeftBorderSum = leftBorderSum;
}
} // 右边求和
int maxRightBorderSum = 0, rightBorderSum = 0;
for(int i = center+1;i<=right;i++){
rightBorderSum += arr[i];
if(rightBorderSum>maxRightBorderSum){
maxRightBorderSum = rightBorderSum;
}
} return maxList(maxLeftSum,maxRightSum,maxLeftBorderSum+maxRightBorderSum); } /**
* 获取 多个Id 的最大值
* @param elements
* @return
*/
private static int maxList(int... elements){
int max = 0;
for(int i = 0;i<elements.length;i++){
if(elements[i]>max){
max = elements[i];
}
}
return max;
} public static void main(String[] args) {
int[] a = {4,-3,5,-2,-1,2,6,-2};
System.out.println(maxsubListSum(a, 0, a.length-1));
}
}
/**
* 优化最大子序列
* @param arr
* @return
*/
public static int optMaxSubListSum(int [] arr){
int maxSum = 0,temp = 0;
for(int i=0;i<arr.length;i++){
temp += arr[i];
if(temp>maxSum){
maxSum = temp;
} if(temp<0){
temp = 0;
}
} return maxSum;
}

Java--最大子序列和实现的更多相关文章

  1. java.——最大子序列和(前提是:全部都是非负数)

    直接上代码吧: 情况一:全部是非负数整数的时候,其实非负实数处理也一样. package Person; import java.util.Scanner; public class Main{   ...

  2. Java实现子序列问题

    一个串的子串是指该串的一个连续的局部.如果不要求连续,则可称为它的子序列. 比如对串: "abcdefg" 而言,"ab","abd",&q ...

  3. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  4. 算法入门:最大子序列和的四种算法(Java)

    最近再学习算法和数据结构,推荐一本书:Data structures and Algorithm analysis in Java 3rd 以下的四种算法出自本书 四种最大子序列和的算法: 问题描述 ...

  5. 动态规划算法——最长公共子序列问题(java实现)

    已知序列X=(A,B,C,A,B,D,A)和序列Y=(B,A,D,B,A),求它们的最长公共子序列S. /* * LCSLength.java * Version 1.0.0 * Created on ...

  6. “最大子序列和”算法 java

    maxSubSum各自是最大子序列和的4中java算法实现. 第一种算法执行时间为O(N^3),另外一种算法执行时间为O(N^2),第三种算法执行时间为O(nlogn),第四种算法执行时间为线性N p ...

  7. 最长递增子序列 LIS 时间复杂度O(nlogn)的Java实现

    关于最长递增子序列时间复杂度O(n^2)的实现方法在博客http://blog.csdn.net/iniegang/article/details/47379873(最长递增子序列 Java实现)中已 ...

  8. LeetCode 300. Longest Increasing Subsequence最长上升子序列 (C++/Java)

    题目: Given an unsorted array of integers, find the length of longest increasing subsequence. Example: ...

  9. LeetCode 5214. 最长定差子序列(Java)HashMap

    题目: 5214. 最长定差子序列 给你一个整数数组 arr 和一个整数 difference,请你找出 arr 中所有相邻元素之间的差等于给定 difference 的等差子序列,并返回其中最长的等 ...

  10. Java实现 蓝桥杯VIP 算法提高 最长公共子序列

    算法提高 最长公共子序列 时间限制:1.0s 内存限制:256.0MB 问题描述 给定两个字符串,寻找这两个字串之间的最长公共子序列. 输入格式 输入两行,分别包含一个字符串,仅含有小写字母. 输出格 ...

随机推荐

  1. JavaScript中null和undefined

    JavaScript的数据类型大体分为两类:原始类型和对象类型.其中,原始类型包括数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null(空)和undefined(未定义), ...

  2. ETL的经验总结

    ETL的考虑        做数据仓库系统,ETL是关键的一环.说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具.回忆一下工作这么些年来,处理数据迁移.转换的工作倒还真的不少.但是那些工作基 ...

  3. c++内存对齐 转载

    转载自http://blog.csdn.net/chengonghao/article/details/51674166 例子举的特别好 很多文章大概都有像这样的结论: 1. 数据项只能存储在地址是数 ...

  4. CMD杀进程 例如:杀8080端口的进程

    首先:端口被占用的报错形式如下 说明8080端口被占用 解决方案一:查找pid,根据pid去任务管理器的进程中结束占用8080端口号的进程 1.首先按快捷键windows+R,在运行框里输入cmd,如 ...

  5. eclipse中svn提交过滤不需要的文件

    eclipse>Preference>Team>Ignored Resource 添加   .settings   .classpath   .project

  6. Maven之(三)Maven插件

    Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,像编译是通过maven-compile-plugin实现的.测试是通过maven-surefire-p ...

  7. CentOS7 离线安装gcc/pcre-devel/openssl-devel/zlib-devel

    1. 解压CentOS7操作系统安装镜像,进入到CentOS-7.0-1406-x86_64-DVD\Packages目录,这下面存储了很多rpm包. 2. 找到下面列出的rpm包,上传到CentOS ...

  8. CentOS 7安装Teamviewer 12

    1 下载teamviewer 12的rpm包 方法一:访问官网 https://www.teamviewer.com/en/download/linux/ 方法二:wget https://downl ...

  9. Unity3DGUI:人物能量条

  10. glusterfs快速安装

    因为公司ES02集群使用的是SSD磁盘做的raid0,为了保证存放文件的可靠性,即在ES02集群上部署了一套分布式文件系统glusterfs.   结构 ES11    含有gfs程序,并挂载gfs在 ...