我试图得到每个中位数的总和......是的,这是家庭作业......我的答案是错误的,但我无法弄清楚为什么它没有给我正确的答案。有什么建议吗?
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 周的堆应用讲座中介绍)。文本文件包含从 1 到 10000 的整数列表,未排序;您应该将其视为一串数字,一个接一个到达。设 xi 表示文件的第 i 个编号,第 k 个中值 mk 定义为数字 x1,…,xk 的中值。(所以,如果 k 是奇数,则 mk 是 x1,…,xk 中的第 ((k+1)/2) 个最小数;如果 k 是偶数,则 mk 是 x1 中的第 (k/2) 个最小数, ...,xk。)在下面的框中,您应该输入这 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);
}