【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;
    }
}
相关推荐
许小燚6 分钟前
线性表——双向链表
数据结构·链表
董董灿是个攻城狮31 分钟前
5分钟搞懂什么是窗口注意力?
算法
Dann Hiroaki37 分钟前
笔记分享: 哈尔滨工业大学CS31002编译原理——02. 语法分析
笔记·算法
qqxhb2 小时前
零基础数据结构与算法——第四章:基础算法-排序(上)
java·数据结构·算法·冒泡·插入·选择
晚云与城3 小时前
【数据结构】顺序表和链表
数据结构·链表
FirstFrost --sy4 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
森焱森4 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
搂鱼1145144 小时前
(倍增)洛谷 P1613 跑路/P4155 国旗计划
算法
Yingye Zhu(HPXXZYY)4 小时前
Codeforces 2021 C Those Who Are With Us
数据结构·c++·算法
liulilittle5 小时前
LinkedList 链表数据结构实现 (OPENPPP2)
开发语言·数据结构·c++·链表