目录
一、题目
1、题目描述
2、输入输出
2.1输入
2.2输出
3、原题链接
二、解题报告
1、思路分析
我们考虑任意x,到其距离前 k + 1小的k + 1个ai 的分布
显然是原数列中连续的 k + 1 个数,有三种情况:
x在k + 1个数左边
x 为k + 1个数构成区间中点
x 在k + 1个数右边
显然第二种情况要优于情况一、三
那么我们维护一个k + 1的滑窗,然后如果滑窗长度小于最优解时的长度,我们就更新最小长度,然后更新答案为滑窗中点
2、复杂度
时间复杂度: O(n)空间复杂度:O(n)
3、代码详解
import sys
# sys.stdin = open('in.txt', 'r')
t = int(input())
while t:
n, k = map(int, input().split())
a = list(map(int, input().split()))
res = 1e18
ans = a[0]
for i in range(n - k):
if a[i + k] - a[i] < res:
res = a[i + k] - a[i]
ans = a[i] + res // 2
print(ans)
t -= 1