微软100题(3) 最大子数组和

来源:互联网 发布:mash up软件下载 编辑:程序博客网 时间:2024/06/11 00:14
3.求子数组的最大和
题目:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)。

一:动态规划思想

int MaxSubSum(vector<int> &data){int n = data.size();vector<int> dp(n);dp[0] = data[0];int answer = dp[0];for (int i = 1; i < n; ++i){dp[i] = max(dp[i-1]+data[i],data[i]);answer = max(answer,dp[i]);}return answer;}
二、O(1)空间复杂度

int MaxSubSum(vector<int> &data){int n = data.size();int curr = data[0];int answer = data[0];for (int i=1; i<n; ++i){curr = max(curr+data[i],data[i]);answer = max(curr,answer);}return answer;}



0 0
原创粉丝点击