Divide and Conquer -- Leetcode problem53. Maximum Subarray

来源:互联网 发布:馆陶县行知教育集团 编辑:程序博客网 时间:2024/06/17 21:26
  • 描述:Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

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.

  • 分析:这道题看起来题目非常简单,但是仔细想想却又感觉没有什么简便的方法来进行解答,起初想法是直接用穷举法列举出所有可能,但是这样做就失去了这道题的意义,并且会超时
  • 思路一:(动态规划)这道题Leetcode把它放在Divide and Conquer里面其实对做题者的误导蛮大的,虽然可以用分治法的思想,但是最终还是要对整个数组进行操作,分治法的用处不大,仅仅在做题的角度来说,动态规划足够解决这道题,分治法在对这道题解法优化的过程中才会使用到。
class Solution {public:    int maxSubArray(vector<int>& nums) {    int max_num = 0;    int max_max = nums[0];    for (int i = 0; i < nums.size(); i++) {        if (max_num < 0) {            max_num = nums[i];        } else {            max_num += nums[i];        }        max_max = max(max_num, max_max);    }    return max_max;}};