求子数组的最大和要求O(n)
Posted lytwajue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求子数组的最大和要求O(n)相关的知识,希望对你有一定的参考价值。
//求子数组的最大和
//输入一个整形数组。有整数也有负数,数组中连续一个或多个子数组,每一个子数组都有一个和,求全部子数组的和的最大值,要求时间复杂度O(n)
#include<iostream> int GetMax( int * arr) { int max = arr[0]; for (int i = 1; i < 10; i++) { if (max < arr[i]) { max = arr[i]; } } return max; } int getMaxSum(int * arr) { int result = 0; int tmp = 0; for (int i = 0; i < 10; i++) { if (tmp>0) { tmp += arr[i]; } else { tmp = arr[i]; } if (tmp > result) result = tmp; } return result; } using namespace std; void main() { int arr[10] = { 1, -3, 8, -6, 2, -3,4, 8, -11, 12 }; int max = GetMax( arr); if (max <= 0) { cout << "最大子数组和为" << max; cin.get(); return; } int result = getMaxSum(arr); cout << "最大子数组和为" << result; cin.get(); }
以上是关于求子数组的最大和要求O(n)的主要内容,如果未能解决你的问题,请参考以下文章
2021-07-10:请返回arr中,求子数组的累加和,是<=K的并且是最大的。返回这个最大的累加和。