某公司面试题:连续子数组的最大和

来源:互联网 发布:华为盒子软件推荐 编辑:程序博客网 时间:2024/04/29 20:30

题目:

输入一个整型数组,元素有整有负,如{1,-2,3,10,-4,7,2,-5}。求连续子数组和的最大值,时间复杂度O(n)。


题解:

遍历数组元素并求和,用变量maximum记录出现过的和的最大值,用curMaximum记录当前和的最大值,当curMaximum小于0时,curMaximum+下一个元素 < 下一个元素,可直接将curMaximum设为下一个元素值,若curMaximum > maximum,修改maximum为curMaximum。

class Solution {public:Solution():isValidInput(true){}int FindGreatestSum( int* inputArray, int length ){if(!inputArray){isValidInput = false;return 0;}int maximum = 0x80000000;int curMaximum = 0;for(int i = 0; i < length; i++){if(curMaximum < 0)curMaximum = inputArray[i];elsecurMaximum += inputArray[i];if(curMaximum > maximum)maximum = curMaximum;}return maximum;}bool isValidInput;};

动态规划思想:

curMax[i] = Data[i]                          if curMax[i-1] < 0 or i = 0;

curMax[i] = Data[i] + curMax[i-1]  if i > 0 && curMax[i-1] >= 0

最后找最大的curMax[i],或者在计算过程中用变量保存全局maximum。 



0 0
原创粉丝点击