给你两个正整数:n
和 target
。
如果数组 nums
满足下述条件,则称其为 美丽数组 。
nums.length == n
.nums
由两两互不相同的正整数组成。- 在范围
[0, n-1]
内,不存在 两个 不同 下标i
和j
,使得nums[i] + nums[j] == target
。
返回符合条件的美丽数组所可能具备的 最小 和,并对结果进行取模 10^9+7
输入:n = 2, target = 3 输出:4 解释:nums = [1,3] 是美丽数组。 - nums 的长度为 n = 2 。 - nums 由两两互不相同的正整数组成。 - 不存在两个不同下标 i 和 j ,使得 nums[i] + nums[j] == 3 。 可以证明 4 是符合条件的美丽数组所可能具备的最小和
理解:这里基本全局运用到了等差数组求和
自己代码
long m = Math.min(target/2,n);
long num = m*(m+1)/2;
if(n>target/2){
num = num + (n-m)*(target*2+n-m-1)/2%1_000_000_007;
}
return (int) num ;
错误:在程序编写时,除法可以放在一起就放在一起。因为在里面有个整除 比如 7/2=3
正确代码
long k = Math.min(n, target / 2);
return (int) (((1 + k) * k + (n - k) * (n - k - 1 + target * 2)) / 2 % 1_000_000_007);