zoukankan      html  css  js  c++  java
  • 【面试题经典重温【原创】】求子数组的最大和

    题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为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属性选择器
    演示--Jquery核心选择器
    JQuery选择器
    SoapUI 接口测试之post提交本地数据文件
    Python使用MySQLConnector/Python操作MySQL、MariaDB数据库
    测试思想-测试设计 测试用例设计需要注意的几个点
    Jenkins 为Jenkins添加Windows Slave远程执行python项目脚本
    测试思想-测试设计&#160;接口测试用例设计实践总结
    测试思想-测试设计 测试用例设计最新实践总结-来自不断的追求
    Python 基于Python实现邮件发送
  • 原文地址:https://www.cnblogs.com/xiawen/p/3044322.html
Copyright © 2011-2022 走看看