面试题31:连续子数组的最大和

原创 2016年08月29日 13:46:36
1.题目:输入一个整形数组,数组里面有正数也有负数,数组中一个或者连续的多个整数组成一个子数组。求所有子数组的和的最大值,时间复杂度为O(n).
例如:输入的数组为{1,-2,3,10-4,7,2,-5},则和的最大子数组为{3,10,-4,7,2},因此输出为该子数组的和为18.
思路:
可以设置两个变量,逐向相加数组中的每一项,更新这两个变量的值,当累加的子数组的和不为负值时,继续累加,后面累加的值可能是最大值,当为负值的时候就更新子数组和的值,从当前的数据项开始,每一次都和最大的子数组的和进行比较,为了防止数组中的值都是负数,所以刚开始设置最大的子数组的值是最小的负数值,便于比较更新。


源码:
/**
		* 功能说明:找最大子数组的和
		* 作者:K0713
		* 日期:2016-8-29
**/
#include<iostream>
using namespace std;
bool g_InvalidInput = false;
//找最大子数组的和
int FindGreatestSumOfSubArray(int *pData, int nLength)
{
	if ((pData == NULL) || (nLength <= 0))
	{
		g_InvalidInput = true;
		return 0;
	}

	g_InvalidInput = false;

	int nCurSum = 0;
	int nGreatestSum = 0x80000000;//0x80000000是最小的int型(负)数,将nGreatestSum初始化为最小的int值,是为了应对输入全负的情况
	for (int i = 0; i < nLength; ++i)
	{
		if (nCurSum <= 0)
			nCurSum = pData[i];
		else
			nCurSum += pData[i];

		if (nCurSum > nGreatestSum)
			nGreatestSum = nCurSum;
	}

	return nGreatestSum;
}

int main()
{

	int data[] = { 1, -2, 3, 10, -4, 7, 2, -5 };
	int result = FindGreatestSumOfSubArray(data, sizeof(data) / sizeof(int));
	if (g_InvalidInput == false)
		cout << "result:" << result << endl;
	else
		cout << "invalid input!" << endl;
	system("PAUSE");

	return 0;
}

结果:



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数组中连续子数组的和的最大和

点:动态归划 题意:一个数组中,如[1,2,3,4,5],[1,2,3]、[3,4,5]、[1],都可以称之为其的连续子数组,即可以是一个元素,也可以是连续多个元素,必须要连续就行     这样的...

[leetcode]53. Maximum Subarray 最大连续子串python实现【medium】

题目: Maximum Subarray Find the contiguous subarray within an array (containing at least one numb...

【剑指Offer学习】【面试题31:连续子数组的最大和】

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例子说明: 解题思路: 解法一:举例分析数组的规律 解法二...

剑指offer-面试题31-连续子数组的最大和

package case31_FindGreastSumOfSubArray; import java.util.ArrayList; /** * 题目:输入一个整型数组,数组里有正数也有负数。...

剑指offer-面试题31.连续子数组的最大和

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或者连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度O(n)   本题可以把所有子数组全部找出来再求其和的最大值便可以得...

剑指offer--面试题31:连续子数组的最大和

 题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是...

面试题31: 连续子数组的最大和

一. 题目输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).代码请到我的代码库中下载 Point2Offer二. 代...

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

题目: 输入一个整型数组,数组里有正数也有负数,数组中一个或连续的多个整数数组组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n). 分析: 例如输入数组 ...

面试题31:连续子数组的最大和(java)

package findMax; /** * 连续子数组的最大和 * @author root * */ public class FindMax { static int[] data ...

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

题目描述:输入一个整形数组,数组中有正数也有负数。数组中一个或多个连续的整数组成一个子数组,求所有子数组和的最大值,时间复杂度为O(N)。题目分析:对于这道题目,我们大多数人一下子就可以想到:我可以列...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面试题31:连续子数组的最大和
举报原因:
原因补充:

(最多只允许输入30个字)