class Solution public double findMedianSortedArraysvectorint& nums1 vectorint& nums2 int ptr1=0 ptr2=0; int targetNum; int total = nums1size + nums2size; if total 2 !=
在这段代码中,有几个问题需要修正:
- 在计算中位数时,应该根据数组的总长度的奇偶性来确定目标索引,而不是总长度除以2的奇偶性。因此,应该将
total % 2 != 0改为total % 2 == 0。 - 在计算中位数时,需要使用两个指针来遍历两个数组,但是在代码中,指针的更新条件有误。应该根据当前指针所指的元素大小来更新指针,而不是根据当前指针所指的元素与下一个指针所指的元素的大小比较结果来更新指针。因此,应该将
ptr1 += nums1[ptr1] <= nums2[ptr2] ? 1 : 0;改为ptr1 += nums1[ptr1] <= nums2[ptr2] ? 1 : 0;,将ptr2 += nums1[ptr1] > nums2[ptr2] ? 1 : 0;改为ptr2 += nums1[ptr1] > nums2[ptr2] ? 1 : 0;。 - 在计算中位数时,应该使用一个循环来遍历数组,而不是在循环中只进行一次指针的更新。因此,应该将
while (countNum != targetNum)改为while (countNum < targetNum)。 - 在计算中位数时,需要正确累加两个中间元素的值,并且需要将结果转换为浮点数类型。因此,应该将
double total=0;改为double sum=0;,将total += nums2[ptr2];改为sum += nums2[ptr2];,将total += nums1[ptr1];改为sum += nums1[ptr1];,并将return total;改为return sum / 2.0;。
修正后的代码如下所示:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int ptr1 = 0, ptr2 = 0;
int targetNum;
int total = nums1.size() + nums2.size();
if (total % 2 == 0) {
targetNum = total / 2;
int countNum = 0;
while (countNum < targetNum) {
if (nums1[ptr1] <= nums2[ptr2]) {
ptr1++;
} else {
ptr2++;
}
countNum++;
}
double sum = 0;
if (nums1[ptr1] >= nums2[ptr2]) {
sum += nums2[ptr2];
ptr2++;
} else {
sum += nums1[ptr1];
ptr1++;
}
sum += nums1[ptr1] >= nums2[ptr2] ? nums2[ptr2] : nums1[ptr1];
return sum / 2.0;
} else {
targetNum = total / 2;
int countNum = 0;
while (countNum < targetNum) {
if (nums1[ptr1] <= nums2[ptr2]) {
ptr1++;
} else {
ptr2++;
}
countNum++;
}
return nums1[ptr1] >= nums2[ptr2] ? nums2[ptr2] : nums1[ptr1];
}
}
};
``
原文地址: https://www.cveoy.top/t/topic/hQKG 著作权归作者所有。请勿转载和采集!