系列文章目录
前言
本人最近再练习算法,所以会发布一些解题思路,希望大家多指教
一、题目描述
给定一个数组X和正整数K,请找出使表达式X[i] - X[i+1] … - X[i + K +1],结果最接近于数组中位数的下标i,如果有多个i满足条件,请返回最大的i。
其中,数组中位数:长度为N的数组,按照元素的值大小升序排列后,下标为N/2元素的值。
二、输入描述
第一行输入一个数组X;
第二行输入正整数K;
三、输出描述
数组中位数的下标i。
四、java代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] array = Arrays.stream(scanner.nextLine().replace("[", "").replace("]", "").split(",")).mapToInt(Integer::parseInt).toArray();
int k = scanner.nextInt();
//对数组进行正序排序,获取中位数下标
int[] array1 = Arrays.stream(array).sorted().toArray();
int div = array[array1.length / 2];
int min = Integer.MAX_VALUE;
int index = 0;
for (int i = 0; i < array.length; i++) {
int sum = array[i];
//按照要求进行对应下标的减法运算
int len = i + k + 1 < array.length ? i + k + 1 : array.length -1;
int j = i + 1;
while (j <= len) {
sum -= array[j];
j++;
}
//计算与中位数的差值
int abs = Math.abs(sum - div);
//获取距离中位数最近的数
min = Math.min(min, abs);
//如果abs为最小,则当前下标为最接近于数组中位数的下标i
if(min == abs){
index = i;
}
}
System.out.println(index);
}
五、测试用例
输入:
[40,50,15,21,9]
2
输出: