• 动态规划-Maximum Subarray-Maximum Sum Circular Subarray


    2020-02-18 20:57:58

    一、Maximum Subarray

    经典的动态规划问题。

    问题描述:

    问题求解

        public int maxSubArray(int[] nums) {
            int res = nums[0];
            int n = nums.length;
            int[] dp = new int[n];
            dp[0] = nums[0];
            for (int i = 1; i < n; i++) {
                if (dp[i - 1] < 0) dp[i] = nums[i];
                else dp[i] = dp[i - 1] + nums[i];
                res = Math.max(res, dp[i]);
            }
            return res;
        }
    

      

    二、Maximum Sum Circular Subarray

    问题描述:

    问题求解:

     

    唯一的边界条件是如果全部为负数,那么minsubarray = sum,这个时候直接返回max即可。

        public int maxSubarraySumCircular(int[] A) {
            int n = A.length;
            int sum = 0;
            for (int num : A) sum += num;
            int max = A[0];
            int[] dp = new int[n];
            dp[0] = A[0];
            for (int i = 1; i < n; i++) {
                if (dp[i - 1] < 0) dp[i] = A[i];
                else dp[i] = A[i] + dp[i - 1];
                max = Math.max(max, dp[i]);
            }
            int min = A[0];
            for (int i = 1; i < n; i++) {
                if (dp[i - 1] > 0) dp[i] = A[i];
                else dp[i] = A[i] + dp[i - 1];
                min = Math.min(min, dp[i]);
            }
            return max > 0 ? Math.max(max, sum - min) : max;
        }
    

      

  • 相关阅读:
    jQuery插件实践之轮播练习(二)
    jQuery插件实践之轮播练习(一)
    AngularJS+Node.js+socket.io 开发在线聊天室
    Ubuntu上部署Ghost博客
    综合架构的简述
    进程
    路由配置
    计算机专用英语词汇1695个词汇表
    Linux打包压缩解压工具
    磁盘知识体系结构
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12327983.html
Copyright © 2020-2023  润新知