• 4月25日课上练习 一维数组最大子数组(debug版)


    一维数组中求最大子数组的算法

    package com.wangwang.mar;
    
    import java.util.Scanner;
    public class Sum {
     
        public static void main(String[] args) {
            // TODO Auto-generated method stub
     
            Scanner sc=new Scanner(System.in);
            System.out.println("输入数组长度");
            int n=sc.nextInt();
            System.out.println("输入数组数据(用空格分开)");
            int i;
            int a[]=new int[n];
            for(i=0;i<n;i++)
                a[i]=sc.nextInt();
             
            int begin=0;//子数组开始下标
            int end=0;//子数组结束下标
            int maxValue=a[0];
            int tempValue=maxValue;
             
             
            //for循环寻找最大和的连续子数组
            for(i=1;i<n;i++)
            {
                tempValue+=a[i];
                
                if((tempValue>a[i])&&(tempValue>maxValue))
                {
                    end=i;
                    maxValue=tempValue;
                    
                }
                 
                else if(tempValue<=a[i])
                {
                    begin=i;
                    end=i;
                    tempValue=a[i];
                    
                }
            }
             
             
            //输出最大和的连续子数组的相关信息
            System.out.println("最大子数组和为:"+maxValue+"
    子数组内容为:");
            System.out.println("下标:");
            for(i=begin;i<=end;i++)
                System.out.print(i+"  ");
            System.out.println("
    "+"下标对应数值:");
            for(i=begin;i<=end;i++)
                System.out.print(a[i]+"  ");
             
             
        }
     
    }
    

     加入debug后,修改部分代码,如下:

     1 package com.wangwang.mar;
     2 
     3 import java.util.Scanner;
     4 public class Sum {
     5  
     6     public static void main(String[] args) {
     7         // TODO Auto-generated method stub
     8  
     9         Scanner sc=new Scanner(System.in);
    10         System.out.println("输入数组长度");
    11         int n=sc.nextInt();
    12         System.out.println("输入数组数据(用空格分开)");
    13         int i;
    14         int a[]=new int[n];
    15         for(i=0;i<n;i++)
    16             a[i]=sc.nextInt();
    17          
    18         int begin=0;//子数组开始下标
    19         int end=0;//子数组结束下标
    20         int maxValue=a[0];
    21         int tempValue=maxValue;
    22          
    23         System.out.println("设定起始数组为a[0]");
    24         //for循环寻找最大和的连续子数组
    25         for(i=1;i<n;i++)
    26         {
    27             tempValue+=a[i];
    28             System.out.print("将a["+i+"]加入起始数组进行运算");
    29             if(tempValue>a[i])
    30             {
    31                 if(tempValue>maxValue) {
    32                 end=i;
    33                 maxValue=tempValue;
    34                 System.out.println(" "+"最大值更新,当前最大值为:"+maxValue);
    35                 }
    36                 else {
    37                     System.out.println(" "+"构成的新数组最大值不变为:"+maxValue);    
    38                 }
    39             }
    40              
    41             else if(tempValue<=a[i])
    42             {
    43                 begin=i;
    44                 end=i;
    45                 tempValue=a[i];
    46                 maxValue=tempValue;
    47                 System.out.println(" "+"数组总和<该元素,该元素作为当前最大值为:"+maxValue);
    48             }
    49         }
    50          
    51          
    52         //输出最大和的连续子数组的相关信息
    53         System.out.println("最大子数组和为:"+maxValue+"
    该子数组内容为:");
    54         System.out.println("下标:");
    55         for(i=begin;i<=end;i++)
    56             System.out.print(i+"  ");
    57         System.out.println("
    "+"下标对应数值:");
    58         for(i=begin;i<=end;i++)
    59             System.out.print(a[i]+"  ");
    60          
    61          
    62     }
    63  
    64 }

    运行结果,如图:

     

  • 相关阅读:
    zedGraph画心电图
    多窗体之间进行数据通信 传值
    C#共有五种访问修饰符:public、private、protected、internal、protected internal。作用范围如下表:
    Linux进程调度与切换
    Linux学习总结
    Linux内核如何启动并装载一个可执行程序
    Linux编写Shell脚本入门
    如何使用委托
    深入剖析反射
    浅析C#中的文件操作
  • 原文地址:https://www.cnblogs.com/mawangwang/p/10771298.html
Copyright © 2020-2023  润新知