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

    题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)

    Case1:输入数组:1,-2,3,10,-4,7,2,-5 和最大连续子数组为3,10,-4,7,2 则输出18

    Case2:输入数组:3,-2,3,10,-4,7,2,-5 和最大连续子数组为3,-2,3,10,-4,7,2 则输出19

    程序写的比较简单,看了网上的知道自己的缺陷:没有考虑输入为空与和最大为0的区别。。。

     #include<stdio.h>
     #include<stdlib.h>
     void InitArray(int*& A,int M){
               A = (int*)malloc(sizeof(int)*M);
       }
     int maxSum(int* A,int M){
               if(M < 1)//元素个数不符合要求
                     return 0;
             if(M == 1)//元素个数为1时,返回A[0]
                     return A[0];
              int max = A[0],sum = A[0];//初始最大和为A[0],sum用于计算连续数据和
              for(int i = 1; i < M ;i++){
                      if(sum < 0)//去掉小于0的部分和
                              sum = 0;
                      sum += A[i];//重新开始计算连续数据和
                     if(max < sum)//若所得新的连续数据和大于max,则重赋max
                             max = sum ;
              }
              return max;
      }
      int main(){
              int *A, M ;
              printf("输入元素个数:
    ");
              scanf("%d",&M);
              InitArray(A,M);
              printf("输入%d个元素
    ",M);
              for(int i = 0; i < M; i++){
                      scanf("%d",A + i);
             }
              printf("最大和是:%d
    ",maxSum(A,M));
             free(A);
     }
  • 相关阅读:
    京东Java面试题(二)
    京东Java面试题(一)
    阿里java面试题
    Java垃圾回收机制
    MyBatis面试题
    Java IO流总结
    Spring中文文档
    Vue.js实战之组件之间的数据传递
    Vue.js实战之Vuex的入门教程
    Vue系列——在vue项目中使用jQuery及其第三方插件
  • 原文地址:https://www.cnblogs.com/idealing/p/3397685.html
Copyright © 2011-2022 走看看