1. package com.dongbin.test;
  2.  
  3. /**
  4. * 最大子序列和 --分治法
  5. *
  6. * @author dongbin
  7. *
  8. */
  9. public class MaxSubListSum {
  10.  
  11. /**
  12. * 最大子序列的实现方法
  13. *
  14. * @param arr
  15. * --数组
  16. * @param left
  17. * @param right
  18. * @return
  19. */
  20. public static int maxsubListSum(int arr[], int left, int right) {
  21.  
  22. if (left == right) {// arr.length==1
  23. if (arr[left] > 0) {
  24. return arr[left];
  25. } else {
  26. return 0;
  27. }
  28. }
  29.  
  30. // 划分数组
  31. int center = (left + right) / 2;
  32. int maxLeftSum = maxsubListSum(arr, left, center);// 左边最大值
  33. int maxRightSum = maxsubListSum(arr, center + 1, right);// 右边最大值
  34.  
  35. // 左边求和
  36. int maxLeftBorderSum = 0, leftBorderSum = 0;
  37. for (int i = center; i >= left; i--) {
  38. leftBorderSum += arr[i];
  39. if (leftBorderSum > maxLeftBorderSum) {
  40. maxLeftBorderSum = leftBorderSum;
  41. }
  42. }
  43.  
  44. // 右边求和
  45. int maxRightBorderSum = 0, rightBorderSum = 0;
  46. for(int i = center+1;i<=right;i++){
  47. rightBorderSum += arr[i];
  48. if(rightBorderSum>maxRightBorderSum){
  49. maxRightBorderSum = rightBorderSum;
  50. }
  51. }
  52.  
  53. return maxList(maxLeftSum,maxRightSum,maxLeftBorderSum+maxRightBorderSum);
  54.  
  55. }
  56.  
  57. /**
  58. * 获取 多个Id 的最大值
  59. * @param elements
  60. * @return
  61. */
  62. private static int maxList(int... elements){
  63. int max = 0;
  64. for(int i = 0;i<elements.length;i++){
  65. if(elements[i]>max){
  66. max = elements[i];
  67. }
  68. }
  69. return max;
  70. }
  71.  
  72. public static void main(String[] args) {
  73. int[] a = {4,-3,5,-2,-1,2,6,-2};
  74. System.out.println(maxsubListSum(a, 0, a.length-1));
  75. }
  76. }
  1. /**
  2. * 优化最大子序列
  3. * @param arr
  4. * @return
  5. */
  6. public static int optMaxSubListSum(int [] arr){
  7. int maxSum = 0,temp = 0;
  8. for(int i=0;i<arr.length;i++){
  9. temp += arr[i];
  10. if(temp>maxSum){
  11. maxSum = temp;
  12. }
  13.  
  14. if(temp<0){
  15. temp = 0;
  16. }
  17. }
  18.  
  19. return maxSum;
  20. }

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. go: GOPATH entry is relative; must be absolute path: "".

    安装:vscode-go出现以下提示: go: GOPATH entry is relative; must be absolute path: "".Run 'go help g ...

  2. tensorflow与kubernetes/docker结合使用实践

    tensorflow tensorflow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流 ...

  3. .NET中的类库

    1.object类  所有类都继承于object类,是顶级父类,他有以下成员,都是虚方法:  a)   ToString() 默认输出对象所属类的全名称(命名空间.类名) b)   Equals (O ...

  4. TCP报文中的SYN,FIN,ACK,PSH,RST,URG

    TCP的三次握手是怎么进行的:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发 ...

  5. HTML5之Audio音频标签学习

    HTML5中的新元素标签 src:音频文件路径. autobuffer:设置是否在页面加载时自动缓冲音频. autoplay:设置音频是否自动播放. loop:设置音频是否要循环播放. control ...

  6. web页面在微信里打开,字体颜色不正常显示

    问题:写的web项目在微信里的webview里打开(iphone手机),会出现颜色的不识别.写的是白色,数字的部分会过了3-5秒后,变成黑色! 原因:在iphone手机里,数字的部分(具体的长度没有测 ...

  7. VirtualBox 主机与虚拟机互通

    文章转载:http://www.cnblogs.com/HD/p/4011323.html 网络要设置才能互通 注意:不启动Linux系统的时候,设置网络 使用VirtualBox的主机与虚拟机相互通 ...

  8. 觉得VR头显太笨重?轻便的VR“神器”来了

    一直以来需要搭配手机才能使用的VRBOX(VR眼镜盒子)都被大家诟病携带不便.比较笨重.不透气等等问题.大家也一直期待能够有轻便的搭配手机的VR设备出现,最好是可以随身携带的.另外一方面,作为手机最常 ...

  9. JS代码:设为首页 加入收藏

    // JavaScript Document // 加入收藏 <a onclick="AddFavorite(window.location,document.title)" ...

  10. C# EnumHelper

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Reflection ...