题目链接:https://leetcode-cn.com/problems/maximum-split-of-positive-even-integers/
题目如下:
解一:
回溯、一看题目,我的第一反映是回溯,但由于数据量过大,在数据达到90的时候,会超时不通过,但还是记录下
class Solution {
public:
vector<long long> maximumEvenSplit(long long finalSum) {
if(finalSum==0) return {};
backtracking(finalSum,1,0);
return res;
}
void backtracking(long long finalSum,long long startIndex,long long sum){
if(sum==finalSum){
if(path.size()>res.size()){
res=path;
}
return ;
}
for(int i=startIndex;i<=finalSum;i++){
if(i%2==0){
sum+=i;
path.push_back(i);
backtracking(finalSum,i+1,sum);
sum-=i;
path.pop_back();
}
}
}
private:
vector<long long> res;
vector<long long> path;
};
解二:
贪心
#define LL long long
class Solution {
public:
vector<long long> maximumEvenSplit(long long finalSum) {
if(finalSum%2!=0) return {};
vector<LL> res;
for(LL i=2;i<=finalSum;i+=2){
finalSum-=i;
res.push_back(i);
}
//偶数经过若干个偶数的拆分,剩下的一定是偶数,故将最后一个元素加上剩余的值即可
if(finalSum>0) res.back()+=finalSum;
return res;
}
};