【发布时间】:2026-01-31 03:05:01
【问题描述】:
我正在寻找一种方法来从序列中搜索最小后续大小,它的总和满足问题所需的最小总和。
示例(注意索引从 0 开始):
arr[]={5, 1, 3, 5, 10, 7, 4, 9, 2, 8}
sum = 15
所以答案应该是2,因为子序列的最小尺寸是从
a[3]-a[4].
arr[]={1, 2, 3, 4, 5}
sum = 11
所以答案应该是3,因为子序列的最小尺寸是从
a[2]-a[4].
我尝试使用贪婪的方法,代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
vector <int> sequence;
int sequenceSize, sumAsked;
cin>>sequenceSize>>sumAsked;
int sum=0, count=sequenceSize, front=0, back=sequenceSize-1;
for(int i=0; i<sequenceSize; i++){
int j;
cin>>j;
sequence.push_back(j);
sum+=j;
}
if(sum<sumAsked){
cout<<0<<endl;
}
else{
while(sum>sumAsked){
if(sequence[front]>=sequence[back]){
sum-=sequence[back];
back--;
count--;
}
else{
sum-=sequence[front];
front++;
count--;
}
}
cout<<count+1<<endl;
}
}
代码似乎对两个测试用例都有效,但在线判断时出错。有没有更好的代码或方法可供我使用?
【问题讨论】:
-
可能会使用 Kadane 算法的变体。
-
@MohitSharma 我想是这样,但是如何准确地记下用于求和的当前数组索引?
标签: c++ sequence greedy sliding-window