力扣动态规划-10【算法学习day.104】

前言

###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.环形子数组的最大和

题目链接:918. 环形子数组的最大和 - 力扣(LeetCode)

题面:力扣动态规划-10【算法学习day.104】_第1张图片

附上灵神代码:

class Solution {
    public int maxSubarraySumCircular(int[] nums) {
        int maxS = Integer.MIN_VALUE; // 最大子数组和,不能为空
        int minS = 0; // 最小子数组和,可以为空
        int maxF = 0, minF = 0, sum = 0;
        for (int x : nums) {
            // 以 nums[i-1] 结尾的子数组选或不选(取 max)+ x = 以 x 结尾的最大子数组和
            maxF = Math.max(maxF, 0) + x;
            maxS = Math.max(maxS, maxF);
            // 以 nums[i-1] 结尾的子数组选或不选(取 min)+ x = 以 x 结尾的最小子数组和
            minF = Math.min(minF, 0) + x;
            minS = Math.min(minS, minF);
            sum += x;
        }
        return sum == minS ? maxS : Math.max(maxS, sum - minS);
    }
}

后言

上面是动态规划相关的习题,共勉力扣动态规划-10【算法学习day.104】_第2张图片

 

 

你可能感兴趣的:(算法,#,动态规划,算法,leetcode,动态规划,java,学习)