编程珠玑第8章:具有n个浮点数字的向量x,在任何相邻子向量中找出最大和。

来源:互联网 发布:iphone清单软件 编辑:程序博客网 时间:2024/05/21 09:03
 

 http://hi.baidu.com/banyantree/blog/item/7d78b1ef3d2a1e11fdfa3c93.html

#include "stdafx.h"#include <iostream>using namespace std;int FindMaxSumSubSequence(int arr[], int len, int &begin, int &end){int res = 0;  //存储最大和int tempSum = 0; //当前的最大和int tempBegin = 0; //当前的起点int tempEnd = 0;   //当前的终点for (int i = 0; i < len; ++i){tempSum = tempSum + arr[i];if (tempSum < 0) //重新计算{tempSum = 0;tempBegin = i + 1;}elsetempEnd = i;if (tempSum > res) //更改最大和,以及起点和终点{res = tempSum;begin = tempBegin;end = tempEnd;}}return res;}int main(){//int arr[] = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84};int arr[] = {1, -2, 3, 5};int len =sizeof(arr) / sizeof(*arr);int begin = 0;int end = 0;int res = FindMaxSumSubSequence(arr, len, begin, end);printf("%maxSum = %d, start: %d, end: %d\n", res, arr[begin], arr[end]);}