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}) ; 或是:
标签:传参,leetcode4,int,double,len2,len1,数组,public,nums2 来源: https://www.cnblogs.com/silver0609/p/13937499.html