• 数组


      这次测试要求能从一个整形数组中求出所有子数组的和的最大值,并且要求时间复杂度为O(n)。其实能解决这个问题的方案有很多种,有的简单、有的麻烦,有的时间复杂度高,有的时间复杂度低。在课上的时候,有很多同学都上前介绍了自己的方案,写出来的方法也各不相同,但无非就是简单一些或者麻烦一些。而我的想法是从第一个数开始,把每一个子数组的和都求出来,然后做比较,但这种方法时间复杂度为O(n2),并且大部分同学用的都是这种方法。

      之后我上网查询了一种方法,时间复杂度为O(n),并且代码非常简洁,他的想法就是先将最大值付给第一个数,然后找到第一个非负的整数开始往后加,每次相加都记录一下最大值,只要比上一次相加的结果大就刷新最大值的结果,从而找到子数组的和的最大值。代码如下:

     1 package 数组;
     2 
     3 import java.util.Scanner;
     4 
     5 public class shuzu {
     6     static Scanner in=new Scanner(System.in);
     7     public static void main (String[] args){
     8         int num[]=new int[200];
     9         System.out.println("请输入数组个数");
    10         int n;
    11         n=in.nextInt();
    12         System.out.println("请输入数组");
    13         for(int i=0;i<n;i++) {
    14             num[i]=in.nextInt();
    15         }
    16         int max=0; 
    17         int max2=0;
    18         max2=num[0];
    19         for(int i=0;i<n;i++) {
    20             if(max<=0) {
    21                 max=num[i];
    22             }else {
    23                 max+=num[i];
    24             }
    25             if(max2<max) {
    26                 max2=max;
    27             }
    28         }     
    29         System.out.println(max2);
    30     }    
    31 }

      

  • 相关阅读:
    Android防止按钮连续点击
    Android中的AlertDialog遇到的错误
    android通过Jni加载so库遇到UnsatisfiedLinkError问题!!!
    接口回调
    Android中的APinner2
    AndroidAPI
    Android中的下拉列表
    学习地址
    2018/12/21:Date类
    2018/12.21:找出数组最大项和最小项。
  • 原文地址:https://www.cnblogs.com/yuanxiaochou/p/10506870.html
Copyright © 2020-2023  润新知