通过使用java合并两个不同数组来计算排序数组的中值

通过使用java合并两个不同数组来计算排序数组的中值,java,arrays,sorting,mergesort,median,Java,Arrays,Sorting,Mergesort,Median,这是我的解决方案。在排序数组长度为偶数且测试用例失败时获得错误的输出 public double findMedianSortedArrays(int[] nums1, int[] nums2) { int m= nums1.length; int x=nums2.length; int n=m+x; int[] Sortedarray= new int[n]; int i=0; int k=0;

这是我的解决方案。在排序数组长度为偶数且测试用例失败时获得错误的输出

public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int m= nums1.length;
        int x=nums2.length;
        int n=m+x;
        int[] Sortedarray= new int[n];
        int i=0;
        int k=0;
        for(int j=0;j<n;j++){
            if(i<m&&k<x){
                if(nums1== null || nums1[i]>nums2[k]){
                    Sortedarray[j]=nums2[k];
                    k++;
                }
                else{
                    Sortedarray[j]=nums1[i];
                    i++;
                    }
            }
        }
        double median=0;
        if(n%2 == 0){
            median= (Sortedarray[n/2]+ Sortedarray[(n/2)-1])/2;
        }
        else{
            median=Math.floor(Sortedarray[n/2]);
        } 
        return median;
}
public double-findMediansortedarray(int[]nums1,int[]nums2){
int m=nums1.length;
int x=nums2.length;
int n=m+x;
int[]Darray=新int[n];
int i=0;
int k=0;

对于(int j=0;j首先,您需要在除法之前将整数转换为双精度,否则,它将四舍五入为int(基本上是floor),结果将不正确


另外,for循环中的条件是不正确的。它的工作方式现在使数组的一半为空,因为前两个元素被填充,这意味着i==m为真,这使得for循环跳过所有内容,所以请看一看。

是的,我可以使用java.util.array#sort,我仍然尝试使用此方法,但所有测试用例都失败了这很有帮助。谢谢。嗨,是的,我得到了你的第一个要点,并在分区中添加了铸造。我无法理解你关于for循环条件的第二个要点。你能更具体一点吗。你有两个大小为2的数组,其中一个数组从i=0到m,它包含所有较小的元素,所以两个元素都是先添加的,所以在第一个循环之后,我=1,然后i=2,这意味着条件(i