【100题】第三题(数组(元素可为正数、负数、0)的最大子序列和)

2024-04-05 02:38

本文主要是介绍【100题】第三题(数组(元素可为正数、负数、0)的最大子序列和),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

       例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,
       因此输出为该子数组的和18。

 

    解题思路:当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。

 

    程序源码:

   #include <iostream.h>
   int get_sub_sum_max(int *arr, int len)
  {
       int max, sum;
 
       max = arr[0]; //存储最大子数组 和
       sum = 0; //判断 一直相加后 是否为负数 从而影响后面再相加
       while (len--)
       {
          sum += *arr++; //下一个数组 元素 遇到负数 则清零
 
          if (sum >=max)  //当加上一个负数时 max 没有改变 观察后面加许多值后有木有 大于 max的
                max = sum; //max 存储sum 不是零的数后 ,再与下一轮 sum+arr[i]  后相比
         else if (sum < 0) //当前的和为负数,则影响下一个数
               sum = 0;
       }
     return max;
}
int main()
{
     // int a[10]={1,-8,6,3,-1,5,7,-2,0,1}; //这个数组 必须结果是 20
    int a[8]={ 1, -2, 3, 10, -4, 7, 2, -5}; //这个数组 必须 结果是 18
    // int a[10]={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
    printf("%d\n",get_sub_sum_max(a,8));

    return 0;
}

      int a[8]={ 1, -2, 3, 10, -4, 7, 2, -5};

      max=1;sum=1   

      max=1;sum=-1 -->sum=0

      max=3;sum=3

      max=13;sum=13

      max=13;sum=9

      max=16;sum=16

      max=18;sum=18

      max=18;sum=13

      返回 max=18        

         

      这里给出了详细解答:http://blog.csdn.net/v_JULY_v/article/details/6444021

这篇关于【100题】第三题(数组(元素可为正数、负数、0)的最大子序列和)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877456

相关文章

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序