OJ测试结果与自己VS上运行不一致?
本帖最后由 风车呼呼呼 于 2025-2-12 23:29 编辑题目:
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
测试用例:nums1=, nums2=
为啥OJ上测试出来结果是1.5,自己VS运行是正确的2.5呢?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Tmp {
double a;
int len;
}tmp = {
{0},
0
};
void insert(struct Tmp* tmp, double value) {
tmp->a = value;
tmp->len++;
}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int p1 = 0, p2 = 0, middle = (nums1Size + nums2Size) / 2;
while (p1 < nums1Size && p2 < nums2Size) {
if (nums1 < nums2) {
insert(&tmp, nums1);
p1++;
}
else {
insert(&tmp, nums2);
p2++;
}
if (tmp.len == middle+1) {
break;
}
}
while (p1 >= nums1Size && tmp.len < middle+1) {
insert(&tmp, nums2);
p2++;
}
while (p2 >= nums2Size && tmp.len < middle+1) {
insert(&tmp, nums1);
p1++;
}
if ((nums1Size + nums2Size) % 2) {
return tmp.a;
}
else {
return (tmp.a + tmp.a) / 2;
}
}
int main() {
int num1[] = { 1,2 };
int num2[] = { 3,4 };
double result = findMedianSortedArrays(num1, 2, num2, 2);
return 0;
} 你给出的代码有一些问题,导致在OJ上测试结果不正确。我们可以对代码进行修改来解决这些问题。以下是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int *merged = (int*)malloc((nums1Size + nums2Size) * sizeof(int));
int i = 0, j = 0, k = 0;
while (i < nums1Size && j < nums2Size) {
if (nums1 < nums2) {
merged = nums1;
} else {
merged = nums2;
}
}
while (i < nums1Size) {
merged = nums1;
}
while (j < nums2Size) {
merged = nums2;
}
double median;
if ((nums1Size + nums2Size) % 2 == 0) {
median = (merged[(nums1Size + nums2Size) / 2 - 1] + merged[(nums1Size + nums2Size) / 2]) / 2.0;
} else {
median = merged[(nums1Size + nums2Size) / 2];
}
free(merged);
return median;
}
int main() {
int num1[] = {1, 2};
int num2[] = {3, 4};
double result = findMedianSortedArrays(num1, 2, num2, 2);
printf("Median is: %.1f\n", result);
return 0;
}
在这个版本的代码中,我们使用了额外的数组 merged 来存储合并后的数组,然后计算中位数。这样避免了原代码中的逻辑错误。
你的问题主要出现在以下几个方面:
- 没有正确地更新和使用结构体 Tmp。
- 合并数组时的逻辑存在问题。
- 中位数计算时没有正确按照数组长度的奇偶性分别处理。
希望这些修改对你有帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]