我想得到每个中位数的总和......是的,这是作业...我的答案是错的,但我无法弄清楚为什么它没有给我正确的答案。有什么建议吗?
package coursera_week6_p2;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class Coursera_week6_p2 {
public static void main(String[] args) throws FileNotFoundException {
Scanner s = new Scanner(new File("/Users/michellepai/Downloads/Median.txt"));
int[] array = new int[10000];
int i = 0;
while (s.hasNextLine()) {
array[i] = Integer.parseInt(s.nextLine());
i++;
}
Arrays.sort(array);
int m = 0;
long med = 0;
for (int k = 0; k < array.length; k++) {
if (k % 2 == 0) {
m = k/2;
} else {
m =(k-1)/2;
}
System.out.println("arrayIndex [" + k + "]: "+ array[k] +" , median index: " + m + " , median: " + array[m]);
med = med + array[m];
System.out.println("total: " + med);
}
System.out.println(med%10000);
}
}
此问题的目标是实施“中位数维护” 算法(在关于堆应用程序的第5周讲座中介绍)。文本 file包含未排序顺序的1到10000之间的整数列表; 你应该把它视为一个数字流,一个接一个地到达。 令xi表示文件的第i个数,第k个中值mk是 定义为数字x1,...,xk的中位数。 (所以,如果k是奇数,那么mk 是((k + 1)/ 2)x1,...,xk中的最小数;如果k是偶数,那么mk就是 x1,...,xk中的第(k / 2)个最小数。) 在下面的框中,您应键入这些10000中位数的总和,模数 10000(即仅最后4位数)。也就是说,你应该计算 (M1 + M2 + M3 +⋯+ M10000)mod10000。
这就是我的结果......我终于得到了正确答案:D
public static void main(String[] args) throws FileNotFoundException {
Scanner s = new Scanner(new File("/Users/michellepai/Downloads/Median.txt"));
int[] array = new int[10000];
int i = 0;
while (s.hasNextLine()) {
array[i] = Integer.parseInt(s.nextLine());
i++;
}
int m = 0;
long med = 0;
for (int k = 0; k < array.length; k++) {
//int k = 2;
int temp[] = new int[k + 1];
for (int j = 0; j <= k; j++) {
temp[j] = array[j];
}
Arrays.sort(temp);
if (k % 2 == 0) {
m = k / 2;
} else {
m = (k - 1) / 2;
}
System.out.println("arrayIndex [" + k + "]: "+ array[k] +" , median index: " + m + " , median: " + array[m]);
med = med + temp[m];
}
System.out.println(med % 10000);
}
答案 0 :(得分:2)
我认为问题在于:
让xi表示文件的第i个数,第k个中位数mk定义为数字x1,...,xk的中位数
根据上面的定义,mk被定义为数字x1,...,xk的中值。 要计算mk,**您应该排序x1,...,xk,而不是整个数组。使用Arrays.sort(array);
对整个数组进行排序后,xk不是文件的第i个。