Почему этот код не подходит для всех тестовых случаев для медианы двух отсортированных массивов, пропуская только некоторые из них? - PullRequest
0 голосов
/ 28 февраля 2020

Почему этот код недействителен для всех тестовых наборов, только пропуская некоторые из них?

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;  
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...