zoukankan      html  css  js  c++  java
  • 子数组最大累加和(有正有负)

     1 /*
     2 [1,-2,3,5,-2,6,-1];  最大子数组为[3,5,-2,6] 和为12,并且能标记处最大子数组的范围
     3 */
     4 
     5 
     6 #include "stdafx.h"
     7 #include <iostream>
     8 
     9 using namespace std;
    10 
    11 void maxSum(int* arr,int len)
    12 {
    13     if(arr == NULL || len == 0)//合法性判断
    14         return ;
    15 
    16     int cursum = 0;            //记录遍历过程中的当前和
    17     int maxmark = 0x80000000;  //记录最大和
    18     int begin = 0;             //标记和为最大子数组的开始位置
    19     int end = 0;               //标记和为最大子数组的结束位置
    20 
    21     for(int i = 0; i < len; i++)
    22     {
    23         cursum += arr[i];
    24         if(cursum <= 0)
    25         {//当前和为0,则以下一个位置重新开始
    26             cursum = 0;
    27             begin = i+1;//标记开始位置
    28         }
    29 
    30         maxmark = max(maxmark,cursum);
    31                  //每一步都记录最大值,保证maxmark不减少
    32 
    33         if(maxmark == cursum)
    34             end = i;
    35               //向后可能和值还继续大于0,但是已经小于已有的maxNum,                           //end到此结束。
    36     }
    37     cout<<begin<<" "<<end<<" "<<maxmark<<endl;
    38 }
    39 
    40 int _tmain(int argc, _TCHAR* argv[])
    41 {
    42     int arr[] = {1,-2,3,5,-2,6,-1};
    43     maxSum(arr,7);
    44     system("pause");
    45     return 0;
    46 }
    47                     
    View Code
  • 相关阅读:
    Python中yield和yield from区别
    Python基础05编码问题
    Python eval()函数
    Python异常大全
    Python基础08 内置函数
    Python os和sys模块基本操作
    git学习(3)-本地标签管理
    ubuntu 安装 node 以及升级更新到最新版本
    git学习(2)-分支管理
    git学习(1)-git基础
  • 原文地址:https://www.cnblogs.com/lp3318/p/5782289.html
Copyright © 2011-2022 走看看