zoukankan      html  css  js  c++  java
  • Ex 6_1 和最大的相连子序列..._第五次作业

    设数值列表a0,a1 . . . an存放在数组arr[0. . .n]中. sum[0],sum[1],sum[2] . . . .sum[n]为以该下标为终点元素的连续子序列的和的最大值,则sum[i]=max{sum[i-1]+arr[i],arr[i]}

     1 package org.xiu68.ch06.ex5;
     2 
     3 public class Ex6_1 {
     4     /*
     5      * 求和最大的连续子序列
     6      */
     7     public static void main(String[] args) {
     8         // TODO Auto-generated method stub
     9         int[] arr=new int[]{5,15,-30,10,-5,40,10};
    10         int[] arr2=new int[]{10,-11,8,-9,1,2,3,-1,4,5,-7};
    11         computMaxSubSum(arr);     //10 -5 40 10 
    12         computMaxSubSum(arr2);    //1 2 3 -1 4 5 
    13     }
    14     
    15     /*
    16      * 依据递推式:sum[i] = max{sum[i-1]+arr[i],arr[i]}
    17      */
    18     public static void computMaxSubSum(int[] arr){
    19         if(arr==null || arr.length==0){
    20             System.out.println("最长子序列为0");
    21             return;
    22         }
    23         int[] sum=new int[arr.length];                //记录以该元素为终点的子序列的和的最大值
    24         int[] digitNum=new int[arr.length];            //记录以该元素为终点的子序列的长度
    25         int index=0;                                //记录和最大的连续子序列的最后一个元素下标
    26         sum[0]=arr[0];
    27         digitNum[0]=1;
    28         int maxSum=arr[0];                            //记录最大连续子序列的和
    29         
    30         for(int i=1;i<arr.length;i++){
    31             if(sum[i-1]+arr[i]<arr[i]){
    32                 sum[i]=arr[i];
    33                 digitNum[i]=1;
    34             }
    35             else{
    36                 sum[i]=sum[i-1]+arr[i];
    37                 digitNum[i]=digitNum[i-1]+1;
    38             }
    39             
    40             if(maxSum<sum[i]){
    41                 maxSum=sum[i];
    42                 index=i;
    43             }
    44         }//for
    45         System.out.print("和最大的最长子序列:");
    46         for(int i=index-digitNum[index]+1;i<=index;i++)
    47             System.out.print(arr[i]+" ");
    48         System.out.println();
    49         System.out.println("和为:"+maxSum);
    50     }
    51     
    52 }
    View Code
  • 相关阅读:
    spring 装配核心笔记
    小明种苹果
    线性分类器
    报数
    编程计划2.0 //不断更新
    MySQL基础之存储过程
    MySQL基础之视图
    指令系统.传送类指令
    MySQL基础之索引
    寻址方式总结
  • 原文地址:https://www.cnblogs.com/xiu68/p/7989120.html
Copyright © 2011-2022 走看看