小红有一个长度为 n 的数组 a 。小红初始分数为 0 。 小红每次选择两个整数,这两个数的差值不能超过 k ,小红获得这两个数的乘积的分数,被选择过的数不能再选择。 问小红最多能获得多少分数?
第一行输入两个整数 n,k 。 第二行输入 n 个整数 a_i 。 1≤ n,k,a_i ≤ 10^5
输出一个整数。
6 2 1 1 4 5 1 4
21
考点:排序 · 贪心
数据规模 n ≤ 1e5 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:排序
先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。
思路框架(排序 通法 · 非本题专属)
实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。
复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)
该范式的通法易错点
对照本题
样例 1:输入 6 2 / 1 1 4 5 1 4 → 输出 21
1和1配对,4和5配对。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2023年秋招-京东-技术通用岗位-第五批笔试。