zoukankan      html  css  js  c++  java
  • 53. Maximum Subarray

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

    Example:

    Input: [-2,1,-3,4,-1,2,1,-5,4],
    Output: 6
    Explanation: [4,-1,2,1] has the largest sum = 6.
    

    Follow up:

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

    //DP: Time: O(n), Space:O(1)
        public int maxSubArray(int[] nums) {
            if (nums == null || nums.length == 0) {
                return 0;
            }
            
            int sum = nums[0];
            int max = nums[0];
            
            for (int i = 1; i < nums.length; i++) {
                sum = Math.max(sum + nums[i], nums[i]);
                max = Math.max(max, sum);
            }
            
            return max;
        }
    
    //Divide and Concur: Time: O(n!), Space: O(1)
        public int maxSubArray(int[] nums) {
            if (nums == null || nums.length == 0) {
                return 0;
            }
            
            return helper(nums, 0, nums.length - 1);
        }
        
        private int helper(int[] nums, int start, int end) {
            if (start >= end) {
                return nums[start];
            }
            
            int mid = start + (end - start) / 2;
            int mmax = nums[mid];
            int lmax = helper(nums, start, mid - 1);
            int rmax = helper(nums, mid + 1, end);
            
            int sum = mmax;
            
            for (int i = mid - 1; i >= start; --i) {
                sum += nums[i];
                mmax = Math.max(mmax, sum);
            }
            
            sum = mmax;//不要忘记计算完左面的最大值,给sum归位
            
            for (int i = mid + 1; i <= end; i++) {
                sum += nums[i];
                mmax = Math.max(sum, mmax);
            }
            
            return Math.max(mmax, Math.max(lmax, rmax));
        }
  • 相关阅读:
    蔚来汽车笔试题---软件测试
    python 装饰器
    adb
    新手安装禅道至本地
    各种验证码应该如何给值
    int col = Integer.parseInt(args[0]);的用法
    找不到jsp文件:ctrl+shift+R
    通过服务器获取验证码
    Sublime Text 2: [Decode error
    爬虫爬取新闻(二)
  • 原文地址:https://www.cnblogs.com/jessie2009/p/9799356.html
Copyright © 2011-2022 走看看