leetcode4.寻找两个正序数组的中位数 注意int类型除法与double类型的转换 和 数组如何传参给函数
第一次没有通过的答案:
public class Solution {
public double FindMedianSortedArrays(int[] nums1, int[] nums2) {
int len1=nums1.Length,len2=nums2.Length;
int[] nums3=new int[len1+len2];
int i=0,j=0,k=0;
double result;
while(k<len1+len2)
{
if(i<len1 && j<len2)
{
if(nums1[i]<nums2[j])
{
nums3[k]=nums1[i];
i++;
}
else
{
nums3[k]=nums2[j];
j++;
}
}
else if(i<len1)
{
nums3[k]=nums1[i];
i++;
}
else
{
nums3[k]=nums2[j];
j++;
}
k++;
}
int len3=len1+len2;
if(len3%2==0)
{
result=(nums3[len3/2-1]+nums3[len3/2])/2;
}
else
{
result=nums3[len3/2];
}
return result;
}
}
报错的输入是[1,2],[3,4]
但是输入[1,2],[4,5]和[1,2,3][4,5]时结果都对。
所以是2+3/2这里出了问题。
经过分析发现虽然我result类型设成了double,但后面nums3[len3/2-1]+nums3[len3/2]是int型。
众所周知int型除法只保留到个位数,所以在这里结果就变成了2,result用double型只是把int型的2转变成double类型的2。
解决办法:
result=(double)(nums3[len3/2-1]+nums3[len3/2])/2;
从一开始就进行类型转化即可。
值得注意的是,因为报错我想在vs中运行调试一下看看问题出在哪,然后我发现我不会数组传参!
数组传参方法如下:
solution.FindMedianSortedArrays(new int[]{1,2},new int[]{3,4}) ;
或是:


浙公网安备 33010602011771号