【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;
    }
}
相关推荐
papership10 分钟前
【入门级-数据结构-3、特殊树:完全二叉树的数组表示法】
数据结构·算法·链表
smj2302_7968265213 分钟前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
山甫aa33 分钟前
差分数组 ----- 从零开始的数据结构
数据结构
早日退休!!!41 分钟前
《数据结构选型指南》笔记
数据结构·数据库·oracle
Beginner x_u1 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
丑八怪大丑1 小时前
Java数据结构与集合源码
数据结构
_深海凉_4 小时前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
踩坑记录5 小时前
leetcode hot100 寻找两个正序数组的中位数 hard 二分查找 双指针
leetcode
旖-旎5 小时前
深搜练习(电话号码字母组合)(3)
c++·算法·力扣·深度优先遍历
谭欣辰5 小时前
C++快速幂完整实战讲解
算法·决策树·机器学习