力扣动态规划-10【算法学习day.104】
前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.环形子数组的最大和
题目链接:918. 环形子数组的最大和 - 力扣(LeetCode)
题面:
附上灵神代码:
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);
}
}
后言
上面是动态规划相关的习题,共勉