有 n 个物品,第 i 个物品的价值为 a_i 。现在要给这些物品分组,每一组必须是一个下标连续的区间。同时,每一组内的物品差距不能太大,即任意一组内物品的最大价值减去最小价值不能超过某个给定的常数 k 。 给定这些物品,请问最少要分几组?
第一行两个整数 n,k(1 ≤ n ≤ 10^5, 0 ≤ k ≤ 10^9) ,表示物品的数量及给定的常数。 第二行 n 个整数 a_i(0 ≤ a_i ≤ 10^9) ,表示物品的价值。
输出一行一个整数,表示最少的分组数。
4 1 1 3 1 4
4
4 2 1 3 1 4
2
考点:数组 · 贪心
数据规模 n ≤ 1e5 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:贪心
每一步都取当前最优,靠问题性质保证局部最优能拼成全局最优。
思路框架(贪心 通法 · 非本题专属)
实现要点:贪心题关键在于排序规则:按什么关键字排序决定了策略是否正确。
复杂度:时间 O(n log n)(含排序) | 空间 O(1) ~ O(n)
该范式的通法易错点
对照本题
样例 1
4 1 / 1 3 1 44样例 2
4 2 / 1 3 1 42解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2024年秋招-京东-后端开发岗-第2批笔试;2024年秋招-京东-算法岗-第2批笔试;2024年秋招-京东-测试岗-第2批笔试。