当前位置:网站首页>0动态规划 LeetCode918. 环形子数组的最大和
0动态规划 LeetCode918. 环形子数组的最大和
2022-07-23 05:45:00 【18阿鲁】
描述
给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。
环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i + 1) % n] , nums[i] 的前一个元素是 nums[(i - 1 + n) % n] 。
子数组 最多只能包含固定缓冲区 nums 中的每个元素一次。形式上,对于子数组 nums[i], nums[i + 1], …, nums[j] ,不存在 i <= k1, k2 <= j 其中 k1 % n == k2 % n 。
示例 1:
输入:nums = [1,-2,3,-2]
输出:3
解释:从子数组 [3] 得到最大和 3
示例 2:
输入:nums = [5,-3,5]
输出:10
解释:从子数组 [5,5] 得到最大和 5 + 5 = 10
示例 3:
输入:nums = [3,-2,2,-3]
输出:3
解释:从子数组 [3] 和 [3,-2,2] 都可以得到最大和 3
提示:
n == nums.length
1 <= n <= 3 * 104
-3 * 104 <= nums[i] <= 3 * 104
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-sum-circular-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析
比非环形数组多了一种首尾拼接起来的最大子数组和的情况,反向计算这种情况,即在数组和不变的情况下,求出最小子数组和,则剩余的便是首尾拼接的最大子数组和。
此外还要考虑全部是负数的情况,最小子数组是最大的那个数。
class Solution {
public int maxSubarraySumCircular(int[] nums) {
int n = nums.length;
int[] dp = new int[n];
dp[0] = nums[0];
int ans = nums[0];
int min = nums[0];
int sum = nums[0];
int maxest = nums[0];
for (int i = 1; i < n; i++) {
dp[i] = dp[i-1] < 0 ? nums[i] : nums[i] + dp[i-1];
ans = Math.max(ans,dp[i]);
sum += nums[i];
maxest = Math.max(maxest,nums[i]);
}
Arrays.fill(dp,0);
dp[0] = nums[0];
for (int i = 1; i < n; i++) {
dp[i] = dp[i-1] > 0 ? nums[i] : nums[i] + dp[i-1];
min = Math.min(min,dp[i]);
}
if (Math.max(ans,sum-min) != 0) {
return Math.max(ans,sum-min);
}
return maxest;
}
}
边栏推荐
- Question bank of basic principles of steel structure
- 【学习总结】
- 剑*offer—— 链表逆序
- Embedded from entry to mastery (buried) - sharing of ultra detailed knowledge points 1
- 1、经济学十大原理
- TeX or LaTeX or MikTeX or TeX Live or CTeX
- [AUTOSAR com 3. signal sending and receiving process tx/rx]
- 大白话说说synchronized关键词的三种用法
- Embedded from entry to mastery (buried) - sharing of ultra detailed knowledge points 2
- Switch implements expression evaluation
猜你喜欢

Anonymous upper computer V7 waveform display

Interpretation of the paper: recognition of enhancer promoter interactions with neural networks based on pre trained DNA vectors and attention mechanisms

Question bank of basic principles of steel structure

Three versions and optimization of quick sorting by interval -- friends may not know it
Blog Building III: comment system selection

Object based - two classic classes
博客搭建三:评论系统选择

Blog building five: drawing bed selection

C language small project - student achievement management system

C语言基础练习题初学者可参考
随机推荐
快速排序的按区间的三个版本及优化--友友们不一定了解
Implementation of binary tree -c
线程池总结
刷题笔记:二叉树的中序遍历(三种解法-递归,迭代,Morris)
A comprehensive and detailed summary of the basic principles of steel structure
Knowledge structure of advanced algebra
vscode配置
【学习总结】
博客搭建一:框架选择
Awk programming language
【AUTOSAR之FEE(非易失存储器Flash与Eeprom区别)】
Desktop remote protocol - codec
SCI审稿过程中的几种状态
广播,组播,单播
APISIX的源码安装与使用
Upper and lower case letter conversion
【AUTOSAR CanDrive 1.学习CanDrive的功能和结构】
剑*offer—— 链表逆序
Switch implements expression evaluation
嵌入式从入门到精通(入土)——超详细知识点分享3