因此,我正在编写一个方法,在该方法中,它可以找到n编号数组的中值。如果数组有奇数个元素,它可以正常工作,但是如果数组有偶数个元素,我希望程序输出2个中间数中的较高值,而不是2个中间值中的较低值。目前,我的代码正在输出较低的数字。这是代码:
public Long getMedian() {
long median = 0;
Arrays.sort(elements);
if (length % 2 != 0) {
median = elements[length/2];
} if (length % 2 == 0) {
median = ((elements[length/2]) + (elements[(length/2) - 1])) / 2;
median++;
}
return median;
}
例如,如果输入了编号为[30 41 45 50]
的数组,则中值将是45,而不是41。请帮忙!
令人惊讶的是,它是最简单的解决方案:
public Long getMedian() {
Arrays.sort(elements);
return elements[elements.length / 2];
}
在您的代码中,我怀疑变量length
不是elements.length
。
无论如何,我使用这个中值函数:
public static double median(int[] values) {
Arrays.sort(values);
if (values.length == 0)
return 0;
else if (values.length % 2 == 0)
return ((double)values[values.length/2] + (double)values[values.length/2 - 1])/2;
else
return (double)values[values.length/2];
}
public double findmedian(int[] arr) {
int middlevalue = arr.length/2;
if (arr.length%2 == 1) {
return arr[middle];
} else {
return (arr[middle-1] + arr[middle]) / 2.0;
}
}
我认为找到米迪亚时最好返回一个双倍的值。也许这种方法会对你有所帮助。
您可以实现中值的右边界,如下所示:
median = elements[(length/2)]
对于偶数情况