Leecode-53. Maximum Subarray

来源:互联网 发布:双色球随机选号软件 编辑:程序博客网 时间:2024/05/16 10:56

贪心法:

前部分和大于0则有继续相加价值,小于0重置。

class Solution {public:    int maxSubArray(vector<int>& nums) {        int sum=nums[0];        int t=0;        for(int i=0;i<nums.size();i++)        {            if(t<0) t=0;            t+=nums[i];            if(t>sum) sum=t;        }        return sum;    }};


分治法:

public class Solution {      private Result max(int[] nums, int from, int to) {          Result result = new Result();          if (from==to) {              result.max = nums[from];              result.lmax = nums[from];              result.rmax = nums[from];              result.sum = nums[from];              return result;          }          int m = (from+to)/2;          Result r1 = max(nums, from, m);          Result r2 = max(nums, m+1, to);          result.max = Math.max(Math.max(r1.max, r2.max), r1.rmax+r2.lmax);          result.lmax = Math.max(r1.lmax, r1.sum+r2.lmax);          result.rmax = Math.max(r1.rmax+r2.sum, r2.rmax);          result.sum = r1.sum+r2.sum;          return result;      }      public int maxSubArray(int[] nums) {          if (nums == null || nums.length == 0) return 0;          Result result = max(nums, 0, nums.length-1);          return result.max;      }  }  class Result {      // 最大和      int max;      // 靠左侧最大和      int lmax;      // 靠右侧最大和      int rmax;      // 数组和      int sum;  }  


原创粉丝点击