【Leetcode 每日一题】2829. k-avoiding 数组的最小总和

问题背景

给你两个整数 n n n 和 k k k。

对于一个由 不同 正整数组成的数组,如果其中不存在任何求和等于 k k k 的不同元素对,则称其为 k-avoiding 数组。

返回长度为 n n n 的 k-avoiding 数组的可能的最小总和。

数据约束

  • 1 ≤ n , k ≤ 50 1 \le n, k \le 50 1≤n,k≤50

解题过程

由于题中所给的数据都是正数,那么和为 k k k 的数对,一定是由一个小于 ⌊ k 2 ⌋ \lfloor \frac{k}{2} \rfloor ⌊2k⌋ 的数和一个大于 ⌊ k 2 ⌋ \lfloor \frac{k}{2} \rfloor ⌊2k⌋ 构成的。

在上限已知的情况下,要使总和最小,应选择数对中较小的那个,并且避免让另一个出现。

这时,整个结果序列是唯一确定的,可以看作两个等差数列,用求和公式就可以解决问题。

具体实现

java 复制代码
class Solution {
    public int minimumSum(int n, int k) {
        // 如果所需数字数量小于 k / 2,就不必计算第二部分的结果
        int m = Math.min(k / 2, n);
        return (m * (m + 1) + (k * 2 + n - m - 1) * (n - m)) / 2;
    }
}
相关推荐
孤廖3 分钟前
从 “模板” 到 “场景”,用 C++ 磨透拓扑排序的实战逻辑
开发语言·c++·程序人生·算法·贪心算法·动态规划·学习方法
Flash.kkl35 分钟前
优先算法——专题十一:字符串
算法
奔跑吧 android7 小时前
【linux kernel 常用数据结构和设计模式】【数据结构 2】【通过一个案例属性list、hlist、rbtree、xarray数据结构使用】
linux·数据结构·list·kernel·rbtree·hlist·xarray
汉克老师7 小时前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
Mr_Xuhhh8 小时前
项目需求分析(2)
c++·算法·leetcode·log4j
默默无名的大学生9 小时前
数据结构—顺序表
数据结构·windows
c++bug9 小时前
六级第一关——下楼梯
算法
Morri39 小时前
[Java恶补day53] 45. 跳跃游戏Ⅱ
java·算法·leetcode
林木辛9 小时前
LeetCode热题 15.三数之和(双指针)
算法·leetcode·双指针
AndrewHZ9 小时前
【3D算法技术】blender中,在曲面上如何进行贴图?
算法·3d·blender·贴图·三维建模·三维重建·pcg