53. Maximum Subarray

来源:互联网 发布:张起灵 知乎 编辑:程序博客网 时间:2024/06/07 03:15

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

Example:
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.

Note:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

Source Code(C++):

#include <iostream>#include <vector>#include <algorithm>using namespace std;/******************************************//时间复杂度O(n2)class Solution {public:    int maxSubArray(vector<int>& nums) {        int n = nums.size();        int sum = 0;        int ans = nums[0];        for (int i = 0; i < n; i++) {            sum = 0;            for (int j = i; j < n; j++) {                sum += nums[j];                ans = max(ans, sum);            }        }        return ans;    }};*********************************************///时间复杂度O(n)class Solution {public:    int maxSubArray(vector<int>& nums) {        int n = nums.size();        int sum = 0;        int ans = nums[0];        for (int i = 0; i < n; i++) {            sum += nums[i];            ans = max(ans, sum);            sum = max(0, sum);        }        return ans;    }};int main() {    Solution s;    vector<int> v = { -2,1,-3,4,-1,2,1,-5,4 };    cout << s.maxSubArray(v);    return 0;}
0 0
原创粉丝点击