AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3280. 计算最接近的数

中等通过率 42% · 提交 898 · 通过 375
滑动窗口前缀和模拟数学固定滑窗/前缀和

小慕正在处理一个数据分析项目,他有一个数组 X 和一个正整数 K。现在需要找到一个,使得如下表达式的值: X[i] - X[i+1] - ... - X[i+K-1] 尽可能接近整个数组的。如果存在多个符合条件的下标 i,小慕需要返回其中最大的那个。 这里,数组的中位数定义为:将长度为 N 的数组按元素值从小到大排序后,下标为 N/2 的那个元素的值。

提示:带虚线的词点一下有通俗解释。

输入描述

输出描述

示例

示例 1

输入

50 50 2 3
2

输出

1

说明:1. 中位数为50: [50,50,2,3]升序排序后变成[2,3,50,50],中位数为下标4/2=2的元素50; 2. 计算结果为1: X[50,50,2,3]根据题目计算X[i] - … - X[i+K-1]得出三个数 0 (X[0]-X[1]= 50-50) 48 (X[1]-X[2] = 50-2) -1 (X[2]-X[3]= 2-3) 其中48最接近50,因此返回下标1

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
示例图解:数组X=[50,50,2,3], K=2 50 下标0 50 下标1 2 下标2 3 下标3 排序后:[2,3,50,50],中位数=下标2的元素=50 计算三个滑窗: i=0: 50-50=0,与50相差50 i=1: 50-2=48,与50相差2(最接近) i=2: 2-3=-1,与50相差51 ← 最接近,返回下标1
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「计算最接近的数」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。