思路:观察给出的例子,
输入:n = 3, target = 3 输出:8 解释: nums = [1,3,4] 是美丽数组。
不难看出可以分为两个部分,第一个部分是1,第二个部分为3,4,第一个部分是根据相加不等于target的逻辑给出的,第二个部分是因为他已经大于来target所以无论如何相加都不可能等于target,那么求和也可以分为两个部分。
继续观察,可以看出我们不能在数据中添加target-x的数据,所以最大可以添加到target/2。那么前半部分和后半部分就可以分别用等差求和计算
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;
}
};