当前位置:网站首页>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;
}
}
边栏推荐
- golang for range遍历并赋值给字典后出现所有值相同的问题
- C语言基础练习题初学者可参考
- TeX or LaTeX or MikTeX or TeX Live or CTeX
- C语言:基于顺序表的学生管理系统,超级详细,全部都有注释,看完不懂来扇我。
- 关于如何排查vpn服务器无法转发的问题
- 博客搭建四:将自己的博客加入百度和谷歌收录的方法
- [distinguish the meaning and usage of constant pointer and pointer constants const int * and int * const]
- Blog building I: Framework selection
- 【AUTOSAR COM 2.通信协议栈进阶介绍】
- OBS plug-in Foundation
猜你喜欢
![[learning summary]](/img/f6/5f960052735a98057f66b7d186b53f.png)
[learning summary]

Prometheus Operator使用指南笔记

【AUTOSAR之FEE(非易失存储器Flash与Eeprom区别)】

基于UDP的群聊聊天室

Blog Building II: next theme related settings beta

A comprehensive and detailed summary of the basic principles of steel structure

5.4 installation and use of pyinstaller Library

OSI开放系统互联模型和TCP/IP模型

博客搭建六:绑定自己域名的方法

常见的排序方法—选择排序
随机推荐
【学习总结】
【分清楚常量指针与指针常量 Const int *与Int * Const的含义与用法】
Simply realize the function of stack
并发编程1-2
Enter the triangle side length and calculate the area
A comprehensive and detailed summary of the basic principles of steel structure
Dicom开源工具库
合成中文识别数据集的相关repo
AWK 程序设计语言
用单向链表实现 队列
【AUTOSAR COM 1.通信协议栈介绍】
TeX or LaTeX or MikTeX or TeX Live or CTeX
Three versions and optimization of quick sorting by interval -- friends may not know it
[AUTOSAR DEM iv.event memory]
switch实现表达式计算
博客搭建三:评论系统选择
使用InfluxDB数据库的疑惑
二叉树的实现-c
C语言数据库:详细的说明用学生管理系统了解数据库的操作,简单易懂。
表格个人简历