【微软100题】003求子数组的最大和

来源:互联网 发布:wlan网络是什么 编辑:程序博客网 时间:2024/06/05 09:59
/* * 题目: * 3.求子数组的最大和(数组) * 题目: * 输入一个整形数组,数组里有正数也有负数。 * 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 * 求所有子数组的和的最大值。要求时间复杂度为 O(n)。 * 例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为 3, 10, -4, 7, 2, * 因此输出为该子数组的和 18。 */#include <iostream>using namespace std;/* * *a++和(*a)++ * *a++,是让a用完之后 a指针向后移动一次 * (*a)++,是让a指向的数据用完之后,自加一次 */int maxSum(int* a, int n) {int sum = 0;int current = 0;for (int i = 0; i < n; i++) {if (current < 0) {current = a[i];} else {current += a[i];}if (sum < current) {sum = current;}}if (sum == 0) { //数组元素全部为负的情况sum = a[0];for (int i = 1; i < n; i++) {if (sum < a[i]) {sum = a[i];}}}return sum;}int main() {int a[] = { 1, -2, 3, 10, -4, 7, 2, -5 };cout << maxSum(a, 8) << endl;return 0;}


0 0
原创粉丝点击