Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这段代码对于两个排序数组的中间值的所有测试用例都无效,只传递其中的一部分?_Java_Median - Fatal编程技术网

Java 为什么这段代码对于两个排序数组的中间值的所有测试用例都无效,只传递其中的一部分?

Java 为什么这段代码对于两个排序数组的中间值的所有测试用例都无效,只传递其中的一部分?,java,median,Java,Median,为什么此代码对所有测试用例无效,而只传递了其中一些测试用例? public class Solution { public double findMedianSortedArrays(final List<Integer> a, final List<Integer> b) { int n1=a.size(); int n2=b.size(); if(n1>n2) findMedianSortedArrays(b,a);

为什么此代码对所有测试用例无效,而只传递了其中一些测试用例?

public class Solution {
public double findMedianSortedArrays(final List<Integer> a, final List<Integer> b) {
    int n1=a.size();
    int n2=b.size();
    if(n1>n2)
      findMedianSortedArrays(b,a);
    if(n1==0 && n2==0)
      return 0;

      if(n1==0)
      {
          if(n2%2==0)
          {
           return (double)(b.get((b.size()-1)/2)+b.get(b.size()/2))/2;   
          }
          return (double)b.get(b.size()/2);
      }
    int low=0;
    int high=n1;
    while(low<high)
    {
        int partitionX=(low+high)/2;
        int partitionY=(n1+n2+1)/2-partitionX;
        int maxLeftX=((partitionX==0)?Integer.MIN_VALUE:a.get(partitionX-1));
        int minRightX=((partitionX==n1)?Integer.MAX_VALUE:a.get(partitionX));
        int maxLeftY=((partitionY==0)?Integer.MIN_VALUE:b.get(partitionY-1));
        int minRightY=((partitionY==n2)?Integer.MAX_VALUE:b.get(partitionY));
        if(maxLeftX<minRightY && maxLeftY<minRightX)
        {
            if((n1+n2)%2==0)
            {
                return (double)(Math.max(maxLeftX,maxLeftY)+Math.min(minRightX,minRightY))/2;

            }
            return (double)Math.max(maxLeftX,maxLeftY);
        }
        else if(maxLeftX>minRightY)
          high=partitionX-1;
        else
           low=partitionX+1;
    }
     return 0;  
   }
}
公共类解决方案{
公共双FindMediaTransortedArray(最终列表a、最终列表b){
int n1=a.大小();
int n2=b.大小();
如果(n1>n2)
FindMediansortedarray(b,a);
如果(n1==0&&n2==0)
返回0;
如果(n1==0)
{
如果(n2%2==0)
{
return(double)(b.get((b.size()-1)/2)+b.get(b.size()/2))/2;
}
返回(双)b.get(b.size()/2);
}
int低=0;
int高=n1;

while(lowplease tag language)我们不知道你的(失败的)测试用例。这很难帮助。A:[-43,-25,-18,-15,-10,9,39,40]B:[-2]对这个输入感兴趣