这道题需要你找出一个满足要求的和最小的数组,但是具体的选择列表没给出来,乍一看像是回溯法求k组合问题,但是没给选择列表,而且求解区间很大,回溯法就可以pass了
像这种选择列表不确定,但是要求最值,就应该是贪心的思想(由于任意两数不可以和为target,根据贪心的思想,我们从1开始,一直取到 target /2,向下取整,然后看当前的范围是否达到了需要的数组的长度,要是达到了,就直接等差求和,没有达到,就从target+1向后去取数,一直取到数组长度达标)
class Solution {
public:
int minimumPossibleSum(int n, int target) {
const int mod = 1e9 + 7;
int m = target / 2;
if (n <= m) {
return (long long) (1 + n) * n / 2 % mod;
}
return ((long long) (1 + m) * m / 2 +
((long long) target + target + (n - m) - 1) * (n - m) / 2) % mod;
}
};
一开始就是想着回溯,被狠狠拿捏了,贪心还是不熟,要多练