zoukankan      html  css  js  c++  java
  • 连续子数组的最大和

    第一种方法:

    此种方法的思想较为简单:先找出从第1个元素开始的最大子数组,而后再从第2个元素开始找出

    从第2个元素开始的最大子数组,依次类推,比较得出最大的子数组。

     1 import java.util.Scanner;
     2 public class Main{
     3     public static void main(String[] args){
     4         Scanner in = new Scanner(System.in);    
     5         int num = in.nextInt();
     6         int arr[] = new int[num];
     7         for(int i=0;i<num;i++){
     8             arr[i] = in.nextInt();
     9         }
    10         int maxsum = arr[0];
    11         for(int i=0;i<num;i++){
    12             int currsum = 0;
    13             for(int j=i;j<num;j++){
    14                 currsum += arr[j];
    15                 if(currsum>maxsum){
    16                     maxsum = currsum;
    17                 }
    18             }
    19         }
    20         System.out.println(maxsum);
    21     }
    22 }

    此种方法的时间复杂度为O(n*n),在OJ上运行时会显示:没有在规定的时间内运行完成。即说明,没有通过,太低级了!!哈哈

    第二种方法:

    分两种情况  a)当数组中所有元素都是负数是,此问题变成了找数组的最大值;b)当数组中的元素不全为负数时,和最大子数组的第一个元素一定是正数,且子数组的和一定大于0,

     1 import java.util.Scanner;
     2 public class Main{
     3     public static void main(String[] args){
     4         Scanner in  = new Scanner(System.in);
     5         int num = in.nextInt();
     6         int arr[]  = new int[num];
     7         boolean flag = true;
     8         for(int i=0;i<num;i++){
     9             arr[i] = in.nextInt();
    10         }
    11         for(int i=0;i<num;i++){
    12             if(arr[i]>=0){
    13                 flag = false;    //arr[]存在大于或等于0的数
    14             }
    15         }
    16         int i,j;  
    17         int MaxSum = 0;  
    18         int CurSum = 0;
    19         if(flag == false){    
    20               
    21             for(i=0;i<num;i++)  
    22             {  
    23                 CurSum += arr[i];  
    24                 if(CurSum > MaxSum)  
    25                     MaxSum = CurSum;  
    26                 if(CurSum < 0)  
    27                     CurSum = 0;  
    28             }  
    29             System.out.println(MaxSum);
    30         }
    31         if(flag == true){    //arr[]中的元素全部小于0
    32             MaxSum = arr[0];
    33             for(j=0;j<num;j++){
    34                 if(arr[j]>MaxSum){
    35                     MaxSum = arr[j];
    36                 }
    37             }
    38             System.out.println(MaxSum);
    39         }
    40     }
    41 }
  • 相关阅读:
    SQL事务
    C# 怎样读写EXCEL文件
    如何#读写EXCEL 文件 (http://space.cnblogs.com/question/7131/)
    C# 怎样读写EXCEL文件 (http://space.cnblogs.com/question/7131/)
    控制DataGirdView中單元格
    C#中ToString格式大全
    转贴:用SqlCommandBuilder 实现批量更新
    错题记录1
    Java—关于String的分析
    Java模拟双色球彩票
  • 原文地址:https://www.cnblogs.com/XuGuobao/p/7340889.html
Copyright © 2011-2022 走看看