• 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));
        }
  • 相关阅读:
    GB50174-2008《电子信息系统机房设计规范》
    Tickets HDU
    HDU
    [长期更新]题解合集
    网络流/费用流题目总结[持续更新]
    [转载]Maximum Flow: Augmenting Path Algorithms Comparison
    [转载]网络流笔记
    网络流各类算法简单总结与比较
    简单的算法备忘录,个人总结[长期更新]
    训练报告 18春组队04 2014西安全国邀请赛
  • 原文地址:https://www.cnblogs.com/jessie2009/p/9799356.html
Copyright © 2020-2023  润新知