class Result {
public static int activityNotifications(List<Integer> expenditure, int d) {
int notices = 0;
int len = expenditure.size();
for(int i = d; i < len; i++){
int[] clone = new int[d];
for(int j = 0; j < d; j++){
clone[j] = expenditure.get(i - d + j);
}
MergeSort.mergeSort(clone, 0, d - 1);
double median;
if (d % 2 == 0){
median = (clone[d/2] + clone[d/2 + 1]) / 2.0;
} else{
median = clone[d / 2];
}
if(expenditure.get(i) >= median * 2){
notices++;
}
}
return notices;
}
}
class MergeSort{
public static void mergeSort(int[] arr, int l, int h){
if (l < h){
int mid = (l + h) / 2;
mergeSort(arr, l ,mid);
mergeSort(arr, mid + 1 , h);
merge(arr, l, mid, h);
}
}
public static void merge(int[] arr, int l, int mid, int h){
int n1 = mid - l + 1;
int n2 = h - mid;
int[] L = new int[n1];
int[] R = new int[n2];
for (int p = 0; p < n1; p++){
L[p] = arr[p + l];
}
for (int p = 0; p < n2; p++){
R[p] = arr[p + mid + 1];
}
int k = l;
int i = 0;
int j = 0;
while (i < n1 && j < n2){
if (arr[i] <= arr[j]){
arr[k] = L[i];
i++;
k++;
}
else {
arr[k] = R[j];
j++;
k++;
}
while(i < n1){
arr[k] = L[i];
i++;
k++;
}
while(j < n2){
arr[k] = R[j];
j++;
k++;
}
}
}
}
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
String[] firstMultipleInput = bufferedReader.readLine().replaceAll("\\s+$", "").split(" ");
int n = Integer.parseInt(firstMultipleInput[0]);
int d = Integer.parseInt(firstMultipleInput[1]);
List<Integer> expenditure = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList());
int result = Result.activityNotifications(expenditure, d);
bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();
bufferedReader.close();
bufferedWriter.close();
}
}
这是代码。基本上,当我创建 MergeSort.java 文件,然后创建该类的实例并使用静态 mergeSort 方法对数组进行排序时,一切都在我的 IDE 上运行良好。 但是当我在这个只允许一个文件的编码网站上运行它时,我将 MergeSort 类压缩到同一个文件中。现在我意识到,传递给该方法的数组没有进行任何实际更改。请问我可以知道为什么吗?
我尝试了不同的方法,但无法进行排序。
while
方法中的2个merge
循环应位于外部while
循环体之外:
public static void merge(int[] arr, int l, int mid, int h) {
int n1 = mid - l + 1;
int n2 = h - mid;
int[] L = new int[n1];
int[] R = new int[n2];
for (int p = 0; p < n1; p++) {
L[p] = arr[p + l];
}
for (int p = 0; p < n2; p++) {
R[p] = arr[p + mid + 1];
}
int k = l;
int i = 0;
int j = 0;
while (i < n1 && j < n2) {
if (arr[i] <= arr[j]) {
arr[k] = L[i];
i++;
k++;
} else {
arr[k] = R[j];
j++;
k++;
}
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
}