Math
1 | class Solution { |
Quote: lc-2834
复习一下等差数列的求和公式:一个等差数列的和,等于其首项与末项的和,乘以项数除以2。所以从 1 一直加到 n 的和就是 (n + 1) * n / 2
。
题目的基本思想是,如果 target = 7, n = 3,那么最优解就是取从 1 到 7 // 2 = 3
:[1, 2, 3]
,这样的和最小,所以就是取从 1 到 n 的 n 个数,和为 (n + 1) * n / 2
。
但也有复杂情况,那就是如果 n > target // 2
,例如 target = 7, n = 6,那么这时 [1, 2, 3]
后面如果继续添加元素 4
,就会出现 3 + 4 = 7
,违反了元素和不能等于 target 的要求,所以下一个元素只能从 target = 7
开始取,才能确保元素和不为 target。也就是需要在 target 起取 n - target//2
个数,最后的数组为 [1 .. target//2] + [target .. target//2 + n]
,直接计算和即可。