leetcode 1031. 2つの非オーバーラップサブ配列の最大和(C++)
1744 ワード
非負の整数配列
形式的には、最大の
例1:
例2:
例3:
ヒント:
A
が与えられ、2つの非オーバーラップ(連続)サブ配列中の要素の最大和が返され、サブ配列の長さはそれぞれL
およびM
である.(ここで明らかにする必要があるのは、長さLのサブ配列がMのサブ配列の前または後に現れることである.)形式的には、最大の
V
を返し、V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1])
は、次のいずれかの条件を満たします.0 <= i < i + L - 1 < j < j + M - 1 < A.length
、または0 <= j < j + M - 1 < i < i + L - 1 < A.length
. 例1:
:A = [0,6,5,2,2,5,1,9,4], L = 1, M = 2
:20
: ,[9] 1,[6,5] 2。
例2:
:A = [3,8,1,3,2,1,8,9,0], L = 3, M = 2
:29
: ,[3,8,1] 3,[8,9] 2。
例3:
:A = [2,1,5,6,0,9,5,0,3,8], L = 4, M = 3
:31
: ,[5,6,0,9] 4,[0,3,8] 3。
ヒント:
L >= 1
M >= 1
L + M <= A.length <= 1000
0 <= A[i] <= 1000
C++
class Solution {
public:
bool func(int i, int j, int n, int L, int M)
{
if(i+L<=n && j+M<=n && (i+L<=j || j+M<=i))
{
return true;
}
return false;
}
int maxSumTwoNoOverlap(vector& A, int L, int M)
{
int ans=0;
int n=A.size();
vector tmp(n+1);
tmp[0]=0;
for(int i=0;i