• 课堂练习


    解题思路:从头到尾逐个累加数组中的每个数字,初始化和为0;(nCurrSum=0,nGreatestNum=int.MinValue)定义两个变量:“累加子数组和”和“最大子数组和”,第一步把数组中的第一个数字赋值给他们,然后从第二个数字开始累加,累加值放入“累加子数组和”。

           1.如果当前“累加子数组和”小于0,那抛弃前面的“累加子数组和”,从下一个数字开始重新累加,“最大子数组和”的值不更新。

           2.如果当前“累加子数组和”大于0,再让当前“累加子数组和”和当前的“最大子数组和”进行比较。

           3,如果当前“累加子数组和”大于当前“最大子数组和”,则更新“最大子数组和”的值为“累加子数组和”的值。

           4,如果当前“累加子数组和”小于当前“最大子数组和”,“最大子数组和”的值不更新。

          5.再加入数组中的下一个值,“累加子数组和”进入下一轮的累加,“最大子数组和”也进入下一轮的更新。直到数组中所有值都累加完毕。

    //20173522 李秦
    package com.pre.lq;
    import java.util.Scanner;
    public class Solution 
    {
         
       public static void main(String[] args)
        {
           System.out.println("请输入数组中数字的个数:");
           int n=0;
           Scanner input=new Scanner(System.in);
           n=input.nextInt();
            int[] array =new int[n];
            System.out.println("请输入"+n+"个数:");
            for (int i = 0; i < array.length; i++) 
            {
                array[i]=input.nextInt();    
            }
            
            int result =  FindGreatestSumOfSubArray(array);
           
            System.out.println("连续子数组的最大和为:"+result);
     
        }
     
        public static int FindGreatestSumOfSubArray(int[] array) 
        {
               int len = array.length;
               if (len == 0)
               {
                return 0;
               }
               int currentsum = array[0];
               int greatsetsum = array[0];
               System.out.println("第1步:累加子数组和:"+currentsum+",最大子数组和:"+greatsetsum);
               for(int i=1;i<array.length;i++)
               {
                   Long begintime = System.nanoTime();  
                    if(currentsum > 0)
                    {
                        currentsum += array[i];
                    }
                    else
                    {
                        currentsum = array[i];
                    }
                    if(currentsum > greatsetsum)
                    {
                        greatsetsum  = currentsum;
                    }
                   System.out.println("第"+(i+1)+"步:累加子数组和:"+currentsum+",最大子数组和:"+greatsetsum);
                   try{
                        Thread thread = Thread.currentThread();
                        thread.sleep(1500);          //暂停1.5秒后程序继续执行
                    }catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                   Long endtime = System.nanoTime();      //返回值表示从某一固定但任意的时间算起的毫微秒,此方法只能用于测量已过的时间。
    System.out.println("运行时间:"+(endtime - begintime) + "ns"); } return greatsetsum; } }

     运行截图:

  • 相关阅读:
    新装CentOS7用yum安装软件提示 cannot find a valid baseurl for repobase7x86_64
    新手快速上手webpack4打包工具的使用详解
    2种方法教你,如何将exe注册为windows服务,直接从后台运行
    如何部署前端DIST目录
    安装了vs2019 编译node-sass node-gyp 找不到编译器的解决方法
    node-sass安装失败之npm ERR! Failed at the node-sass@4.9.4 postinstall script.
    Node.js安装及环境配置之Windows篇
    npm源切换,从淘宝源切换至npm源
    找不到Python问题解决 (转)
    redisson
  • 原文地址:https://www.cnblogs.com/lq13035130506/p/10770535.html
Copyright © 2020-2023  润新知