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; } }

     运行截图:

  • 相关阅读:
    个人软件过程 1
    一个月学会VC++2012 3.我们动手吧!
    一个月掌握VC++2010?
    个人软件过程2 项目开发的基本流程
    个人软件过程4 功能说明和用户体验设计
    一个月学会VC++2010 5.对话框的数据交换
    个人软件过程3 需求分析
    一个月学会VC++2010 4.细说对象之香艳旖旎
    一个月学会VC++2010 1.送上门的银子
    一个月学会VC++2010 2.看起来风险不大
  • 原文地址:https://www.cnblogs.com/lq13035130506/p/10770535.html
Copyright © 2011-2022 走看看