• 求两个子数组的最大和


    问题:一数组的两个子数组的和最大,要求O(n)

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<time.h>
     4 /*
     5   一数组的两个子数组的和最大,要求O(n) 
     6 */ 
     7 int main()
     8 {
     9  int Max = 0, MMax = 0;  //Max 记录每次的最大值, MMax记录两个数组和的最大值 
    10  int a[10], b[10];  //a[] 为原数组    b[]用来记录从右向左遍历时到当前位置的最大和 
    11  int sum = 0, i;   
    12  
    13  
    14  srand((unsigned)time(NULL));
    15  
    16  printf("数组元素为:  ");
    17  for(i = 0; i < 10; ++i)
    18  {
    19   a[i] = rand()%10 - 5;
    20   printf("%d   ", a[i]);
    21   
    22  }
    23  
    24  for(i = 9; i > 0; --i)   //从右向左遍历时,记录最大值 
    25  {
    26   sum += a[i];
    27   if(sum < 0)
    28   {
    29    sum = 0;
    30   }
    31   else
    32   {
    33    if(sum > Max)
    34    {
    35     Max = sum;
    36    }
    37   }
    38   b[i] = Max;
    39  }
    40  
    41  sum = 0; Max = 0;
    42  
    43  for(i = 0; i < 9; ++i)  //从左向右遍历时,此时的最大与后面的最大值相加 
    44  {
    45   sum += a[i];
    46   if(sum < 0)
    47   {
    48    sum = 0;
    49   }
    50   else
    51   {
    52    
    53    if(MMax < (sum + b[i+1]))
    54    MMax = sum + b[i+1]; 
    55   }
    56  }
    57  
    58  printf("
    ");
    59  printf("MMax = %d
    ", MMax);
    60  return 0;
    61 } 
  • 相关阅读:
    从txt读取数据到Cvmat
    PCA之后进行归一化
    vc中调用exe文件并传递参数
    C#安装包过程
    电脑技巧
    DLL文件的创建与调用
    SVM调用方法
    舌顶上腭位置与作用
    KNN算法的實現
    How to Read a Paper
  • 原文地址:https://www.cnblogs.com/cpp-cpp/p/6720389.html
Copyright © 2020-2023  润新知