所以我正在编写一种方法,在其中找到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.请帮忙!
答案 0 :(得分:2)
令人惊讶的是,这是最直接的解决方案:
/**
* Example #1:
* Requests a list of all account summaries for the authorized user.
*/
try {
AccountSummaries accountSummaries = service.management().
accountSummaries().list().execute();
} catch (IOException e) {
System.out.println("An error occurred: " + e);
}
答案 1 :(得分:0)
在您的代码中,我怀疑变量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];
}
答案 2 :(得分:0)
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;
}
}
我觉得最好在找到meadian时返回双倍价值。可能这种方法会对你有帮助。
答案 3 :(得分:0)
你可以像这样实现中位数的右边界:
median = elements[(length/2)]
表示偶数情况