zoukankan      html  css  js  c++  java
  • 课堂练习

    解题思路:从头到尾逐个累加数组中的每个数字,初始化和为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; } }

     运行截图:

  • 相关阅读:
    注册、登录、忘记密码实战
    python3错误:format() takes at most 2 arguments
    Charles手机抓包简要步骤
    VARCHAR2(N CHAR)与VARCHAR2(N)的区别
    关于VI一些常用的操作
    LINUX下 基于 Socket 的 UDP 和 TCP 编程具体实现
    VC++6.0实现文本格式的转换保存
    crt的sftp使用用于Windows与Linux之间的通讯
    pl/sql 导出脚本与使用
    在oracle10g下启动服务报 Permission denied错误解决方法
  • 原文地址:https://www.cnblogs.com/lq13035130506/p/10770535.html
Copyright © 2011-2022 走看看