2829 k-avoiding 数组的最小总和

·   ·   ·   ·

  ·   ·


题目链接

2829. k-avoiding 数组的最小总和

分析

考虑比 $k$ 小的数

如果将 $1$ 加入数组内,我们就不能选择 $k - 1$;如果将 $2$ 加入数组内,我们就不能选择 $k - 2 \cdots$

以此类推,对于比 $k$ 小的数,我们取其中较小的一半 $1$ 到 $\lfloor\frac{2}{k}\rfloor$

如果 $n > \lfloor\frac{2}{k}\rfloor$ ,剩下的数从 $k$ 开始,取到 $n - \lfloor\frac{2}{k}\rfloor$ 即可

可以直接使用等差数量求和公式得到答案

代码实现

class Solution {
public:
    int minimumSum(int n, int k) {
        int t = min(k >> 1, n);
        int first = (t * (t + 1)) >> 1;
        int second = ((k * 2 + n - t - 1) * (n - t)) >> 1;
        return first + second;
    }
};

复杂度分析

  • 时间复杂度:$O(1)$
  • 空间复杂度:$O(1)$