• java最大子序列


     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class MaxSubSeq {
     5 //    例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。
     6 //    状态转移方程: sum[i]=max(sum[i-1]+a[i],a[i])
     7 // 如果全是负数{ -2, -11, -4, -13, -5, -2 }
     8     
     9     // 获取最大子序列之和
    10     public static int getSumOfMaxSubSeq(int[] arr) {
    11         int sum = 0;
    12         int max = arr[0];
    13                 
    14         for(int i = 0;  i < arr.length; i++) {
    15             sum += arr[i];
    16             
    17             if (sum > max) {
    18                 max = sum;
    19             }
    20             
    21             if (sum < 0) {
    22                 sum = 0;
    23             }
    24         }
    25 
    26         return max;
    27     }
    28     
    29     // 获取最大子序列
    30     public static ArrayList<Integer> getMaxSubSeq(int[] arr) {
    31         int sum = 0;
    32         int max = arr[0];
    33         ArrayList<Integer> list = new ArrayList<Integer>(); // 存储最大子序列
    34         ArrayList<Integer> tempList = new ArrayList<Integer>(); // 存储临时序列
    35                 
    36         for(int i = 0;  i < arr.length; i++) {
    37             sum += arr[i];
    38             tempList.add(arr[i]);
    39             
    40             if (sum > max) {
    41                 max = sum;
    42                 list.clear();
    43                 copy(tempList, list);
    44             }
    45             
    46             if (sum < 0) {
    47                 sum = 0;
    48                 tempList.clear();
    49             }
    50         }
    51 
    52         return list;
    53     }
    54     
    55     // 深度copy ArrayList
    56     public static void copy(List src,List dest){
    57             for (int i = 0 ;i < src.size() ; i++) {
    58                 Object obj = src.get(i);            
    59                 if (obj instanceof List){
    60                     dest.add(new ArrayList());
    61                     copy((List)obj,(List)((List)dest).get(i));
    62                 }else{
    63                     dest.add(obj);
    64                 }
    65             }
    66         }
    67       
    68     public static void main(String[] args) {
    69         int[] arr = { -2, 11, -4, 13, -5, -2 };
    70         
    71         int max = getSumOfMaxSubSeq(arr);
    72         System.out.println("最大子序列之和: " + max);
    73         
    74         ArrayList<Integer> list = getMaxSubSeq(arr);
    75         for(Integer integer: list) {
    76             System.out.println("最大子序列: " + integer);
    77         }
    78     }
    79 }
  • 相关阅读:
    SpringMVC截图版
    MySQL
    Mybatis-Spring
    Spring
    get
    log
    SpringBoot
    Mybatis和spingboot整合
    学习笔记-英语
    PartialView+$.reload()局部刷新
  • 原文地址:https://www.cnblogs.com/maduar/p/8066546.html
Copyright © 2020-2023  润新知