zoukankan      html  css  js  c++  java
  • 一维最大子数组和(续)

    import java.util.Scanner;

    public class shuzu {
    public static int maxArr(int a[]) {
    int max=a[0];
    for(int i=1;i<a.length;i++) {
    if(a[i]>max) {
    max=a[i];
    }
    }
    return max;

    }

    public static void main(String args[]) {
    /*
    * 生成数组
    */
    System.out.println("请输入数组中数字个数");
    Scanner scan = new Scanner(System.in);
    int num = scan.nextInt();
    int[] array = new int[num];
    System.out.println("请输入"+num+"个数值");
    for(int i = 0;i < num;i++) {
    array[i] = scan.nextInt();
    }
    int lon = ((1+num)/2+1)*num;//存放所有子数组和的 数组
    int[] sum = new int[lon];

    int sumchangdu = 0;
    int sumchangdu1 = 0;
    /*求所有子数组的和 放进sum数组中*/
    int[] maxarr = new int[num];//存放子数组和最大值的所有组成元素的数组
    for(int i = 0;i < num;i++) {
    int[] arr = new int[num];//存放当前子数组和的所有组成元素的数组

    int asum = 0;
    int changdu = 0;
    for(int j = 0; j < num - i;j++) {

    arr[changdu] = array[i+j];
    asum = asum + array[i+j];
    sum[sumchangdu] = asum;
    sumchangdu1 = sumchangdu+1;
    System.out.println("当前执行第"+sumchangdu1+"步");
    System.out.println("第"+ sumchangdu1 +"个子数组和为:"+sum[sumchangdu]);
    System.out.print("当前组成当前的子数组和的元素为:");
    for(int y = 0; y < arr.length;y++) {
    if(arr[y]!=0)
    System.out.print(arr[y]+" ");
    }
    System.out.println("");
    if(sum[sumchangdu]==maxArr(sum)) {

    for(int k =0; k < arr.length;k++)
    maxarr[k] = arr[k];

    }
    System.out.println("当前"+ sumchangdu1 +"个子数组和的最大值为:"+maxArr(sum));

    System.out.print("当前组成最大子数组和的元素为:");

    for(int x =0;x < maxarr.length;x++ ) {
    if(maxarr[x]!=0)
    System.out.print(maxarr[x]+" ");

    }
    System.out.println("");
    System.out.println("输入0键开始执行下一步");

    int x = scan.nextInt();
    if(x==0) {
    System.out.println("--------------------------------------------");
    sumchangdu++;
    changdu++;
    }
    else {
    System.out.println("输入有误,程序退出!");<br> System.exit(0);
    }


    }
    }
    scan.close();
    int max = sum[0];
    for(int m = 1; m < lon;m++) {
    if(sum[m]>max) //求sum数组最大的值
    max = sum[m];

    }
    System.out.println("最大子数组和为:"+max);//输出最大的子数组和
    }



    }

    要求:求一个一维数组的最大子数组和,并要求逐步实现,显示执行第几步,当前所处理的元素,当前子数组和,当前最大子数组和以及最大子数组和所组成的元素

    思路:定义int[] maxarr = new int[num];//存放子数组和最大值的所有组成元素的数组,int[] arr = new int[num];//存放当前子数组和的所有组成元素的数组,双层for循环实现,用方法public static int maxArr(int a[])判断当前所存储的子数组和是否为最大的子数组,如果是则存储,不是则继续利用上一个最大的子数组和的数组。

    是多疑还是去相信 谎言背后的忠心 或许是自己太执迷 命题游戏 沿着他的脚步 呼吸开始变得急促 就算看清了面目 设下埋伏 真相却居无定处 I swear I'll never be with the devil 用尽一生孤独 没有退路的路 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 沿着他的脚步 呼吸开始变得急促 就算看清了面目 设下埋伏 真相却居无定处 I swear I'll never be with the devil 用尽一生孤独 没有退路的路 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 黑夜和白昼 你争我夺 真相被蛊惑 心从不退缩 这天堂荒漠 留给孤独的猎手
  • 相关阅读:
    阻止所有普通账号登录服务器
    grep命令
    redis集群配置和节点管理
    redis的安装和配置
    shell特殊字符
    获取docker容器的ip地址
    mysql5.6.38误删除root用户后的一系列问题及解决办法
    CenrOS7.5安装msyql5.7.24
    使用163邮箱的smtp ssl端口发送邮件
    linux统计大文件行数的命令效率大对比
  • 原文地址:https://www.cnblogs.com/muailiulan/p/10772209.html
Copyright © 2011-2022 走看看