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}) ;
或是:

 

 

 

posted @ 2020-11-06 16:27  银子w  阅读(156)  评论(0)    收藏  举报