【面试题】剑指Offer-31-求连续子数组的最大和

来源:互联网 发布:python 图论库 编辑:程序博客网 时间:2024/06/06 01:05

题目概述


解法思路

定义tmpSum = 0 和 Sum = 0

遍历这个数组

当tmpSum小于0时,直接将tmpSum赋值为0

当tmpSum不小于0时,将tmpSum加上当前的数字

如果tmpSum比Sum大,则更新Sum的值

代码实现

#include<iostream>using namespace std;pair<bool,int> MaxArrOfNum(int* arr, size_t n){if (arr == NULL || n == 0)return make_pair(false, 0);//判断是不是全是负数//全是负数,不满足题目要求size_t i = 0;while (i < n){if (arr[i] > 0)break;++i;}if (i == n)return make_pair(false, 0);int maxSum = 0;int tmpSum = 0;for (size_t i = 0; i < n; ++i){//如果小于0,直接覆盖tmpSum//如果大于0,加到tmpSum上if (tmpSum <= 0)tmpSum = arr[i];elsetmpSum += arr[i];//将maxSum置为tmpSum和maxSum中的最大值if (tmpSum > maxSum)maxSum = tmpSum;}return make_pair(true, maxSum);}void TestMaxArrOfNum(){int arr[] = { 1, -2, 3, 10, -4, 7, 2, -5 };//int arr[] = { -1, -1, -1, -1 };pair<bool, int> ret = MaxArrOfNum(arr, sizeof(arr) / sizeof(arr[0]));if (ret.first == true){int retNum = ret.second;cout << "最大的连续数组的值:" << retNum << endl;}else{cout << "输入的数组有误!" << endl;}}


1 0
原创粉丝点击