当前位置:网站首页>LeetCode 1031. Maximum sum of two non overlapping subarrays
LeetCode 1031. Maximum sum of two non overlapping subarrays
2022-07-07 16:58:00 【@Little safflower】
Problem description
Give an array of nonnegative integers A , Return two non overlapping ( continuity ) The maximum sum of elements in a subarray , The length of the subarray is L and M.( What needs to be clarified here is , Long for L The subarray of can appear at length as M Before or after the subarray of .)
In form , Return to the biggest V, and V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1]) And meet one of the following conditions :
0 <= i < i + L - 1 < j < j + M - 1 < A.length, or
0 <= j < j + M - 1 < i < i + L - 1 < A.length.
Example 1:
Input :A = [0,6,5,2,2,5,1,9,4], L = 1, M = 2
Output :20
explain : In a selection of subarrays ,[9] The length is 1,[6,5] The length is 2.
Example 2:Input :A = [3,8,1,3,2,1,8,9,0], L = 3, M = 2
Output :29
explain : In a selection of subarrays ,[3,8,1] The length is 3,[8,9] The length is 2.
Example 3:Input :A = [2,1,5,6,0,9,5,0,3,8], L = 4, M = 3
Output :31
explain : In a selection of subarrays ,[5,6,0,9] The length is 4,[0,3,8] The length is 3.
Tips :
L >= 1
M >= 1
L + M <= A.length <= 1000
0 <= A[i] <= 1000source : Power button (LeetCode)
link :https://leetcode.cn/problems/maximum-sum-of-two-non-overlapping-subarrays
Copyright belongs to the network . For commercial reprint, please contact the official authority , Non-commercial reprint please indicate the source .
java
class Solution {
public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) {
int n = nums.length;
// The prefix and
int[] sum = new int[n + 1];
for(int i = 0;i < n;i++){
sum[i + 1] = sum[i] + nums[i];
}
// In exchange for
if(firstLen > secondLen){
firstLen ^= secondLen;
secondLen ^= firstLen;
firstLen ^= secondLen;
}
int[][] dp = new int[n + 1][2];
int ans = 0;
// From firstLen Start
for(int i = firstLen;i <= n;i++){
// The current element has been closed before firstLen And
int s1 = sum[i] - sum[i - firstLen];
dp[i][0] = Math.max(dp[i - 1][0],s1);
ans = Math.max(ans,s1 + dp[i - firstLen][1]);
if(i >= secondLen){
int s2 = sum[i] - sum[i - secondLen];
dp[i][1] = Math.max(dp[i - 1][1],s2);
ans = Math.max(ans,s2 + dp[i - secondLen][0]);
}
}
return ans;
}
}
边栏推荐
猜你喜欢
随机推荐
Pycharm terminal enables virtual environment
ATM system
【图像传感器】相关双采样CDS
Process from creation to encapsulation of custom controls in QT to toolbar (I): creation of custom controls
Pycharm IDE下载
Usage of config in laravel
LeetCode 1155. 掷骰子的N种方法 每日一题
skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
Inner monologue of accidental promotion
【PHP】PHP接口继承及接口多继承原理与实现方法
网关Gateway的介绍与使用
QML初学
dapp丨defi丨nft丨lp单双币流动性挖矿系统开发详细说明及源码
浅浅理解.net core的路由
最新Android高级面试题汇总,Android面试题及答案
three. JS create cool snow effect
LeetCode 403. 青蛙过河 每日一题
AutoLISP series (2): function function 2
使用JSON.stringify()去实现深拷贝,要小心哦,可能有巨坑
QT中自定义控件的创建到封装到工具栏过程(二):自定义控件封装到工具栏

![[Android -- data storage] use SQLite to store data](/img/f6/a4930276b3da25aad3ab1ae6f1cf49.png)



![[C language] question set of X](/img/17/bfa57de183c44cf0a3c6637bb65a9d.jpg)



