【发布时间】:2015-08-24 14:34:00
【问题描述】:
我必须找到中位数之前和之后的元素的总和,尽可能接近。例如: 输入:{4,5,99,-1,5,6} 输出:3(索引为 3 的元素) //我们从 1 开始计数
public int median(int[] array) {
int index = 0;
int minSum;
int sum = 0;
int leftSum = 0;
int rightSum = 0;
int[] subtraction = new int[array.length];
for (int i = 1; i < array.length; i++) {
sum = array[i] + sum;
}
rightSum = sum;
subtraction[0] = rightSum - leftSum;
for (int i = 1; i < array.length; i++) {
leftSum = leftSum + array[i - 1];
rightSum = sum - array[i];
if (leftSum > rightSum) {
subtraction[i] = leftSum - rightSum;
} else {
subtraction[i] = rightSum - leftSum;
}
}
minSum = subtraction[0];
for (int i = 1; i < subtraction.length; i++) {
if (subtraction[i] < minSum) {
minSum = subtraction[i];
index = i;
}
}
return index + 1;
}
我知道我不必寻找最小值,但我找不到其他方法。我的问题是如何找到最接近的数字?
【问题讨论】:
-
您确定要/需要找到中位数吗?因为在您的示例中,中位数为 5。最接近中位数的值为 4 或 6。
-
这就是任务。我知道代码不起作用,但我不知道如何修复它。
-
我的意思是即使你的结果也不符合你的要求。结果不能为 3,甚至不能作为索引。
-
我不知道,因为我不明白你的确切问题是什么。 AFAIK 要找到中位数,您可以先对数组进行排序,然后找到中间的元素。
-
听起来你正在寻找平衡一棵树