• 【面试题经典重温【原创】】求子数组的最大和


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

    看完何海涛的解答,我觉得这个题目可以抽象到一个更高的层次,与某些问题有异曲同工之妙,比如判断单链表是否有环、寻找单链表中的倒数第K个元素,包含min函数的栈等,都是定义两个变量,一个是主变量,一个是辅助变量。

    程序中,定义了两个变量,一个变量求连续子数组的和,另一个变量的作用是记录这整个过程中最大的那个和。

    需要考虑到的特殊情况是 1、异常输入,比如数组长度为0;2、数组元素全部为负数的时候,题目退化成寻找最大的元素。

    根据以上的信息,我们可以写出如下的代码:

     1 #include<iostream>
     2 
     3 using namespace std;
     4 int maxSubSum(int a[],int length)
     5 {
     6     int sum = 0,temp = 0,i;
     7     if(length <= 0)
     8     {
     9         cout << "error input" << endl;
    10         return 0;
    11     }
    12     for(i=0;i<length;i++)
    13     {
    14         sum += a[i];
    15         if(sum < 0)
    16             sum = 0;
    17         if(sum > temp)
    18             temp = sum;
    19     }
    20     if(temp == 0)//全部为负数
    21     {
    22         temp = a[0];
    23         for(i = 1;i<length;i++)
    24         {
    25             if(a[i] > temp)
    26                 temp = a[i];
    27         }
    28     }
    29 
    30     return temp;
    31 }
    32 int main()
    33 {
    34 
    35     int a[8] = {1, -2310, -472, -5};
    36 
    37     int result = maxSubSum(a,8);
    38     
    39     cout << result <<endl;
    40     system("pause");
    41     
    42     return 0;
    43 }

    程序只完成了基本的功能,需要交互输入的时候可以更改。

  • 相关阅读:
    Jquery简略API使用
    JS全部API笔记
    实现nginx的负载均衡和反向代理
    HashMap在Java1.7与1.8中的区别
    数据库设计三大范式
    Java集合
    Object类有哪些方法
    spring mvc出现 Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'endtime'
    int和Integer的区别
    第二次面试-科大讯飞(卒)
  • 原文地址:https://www.cnblogs.com/xiawen/p/3044322.html
Copyright © 2020-2023  润新知