其他分享
首页 > 其他分享> > leetcode4.寻找两个正序数组的中位数 注意int类型除法与double类型的转换 和 数组如何传参给函数

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