Mediana dell'array ordinato unendo due array diversi utilizzando java [duplicate]

Oct 31 2020

Questa è la soluzione da me. ottenere un output errato mentre la lunghezza dell'array ordinato è pari e i casi di test non riescono.

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;
}

per una migliore comprensione della domanda data, seguire le istruzioni seguenti. Dati due array ordinati nums1 e nums2 di dimensione m e n rispettivamente, restituisce la mediana dei due array ordinati. ex1: Input: nums1 = [1,3], nums2 = [2] Output: 2.00000 Spiegazione: array unito = [1,2,3] e mediana è 2.

ex2: Input: nums1 = [1,2], nums2 = [3,4] Output: 2.50000 Spiegazione: array unito = [1,2,3,4] e mediana è (2 + 3) / 2 = 2.5.

Risposte

Ecto Oct 31 2020 at 03:50

Prima di tutto, devi lanciare gli interi per raddoppiare prima della divisione, altrimenti verrà arrotondato a int (fondamentalmente floor) e il risultato sarà errato.

Inoltre, le condizioni nel ciclo for non sono corrette. Il modo in cui funziona ora rende vuota metà dell'array, poiché i primi 2 elemnts vengono riempiti, ciò significa che i == m è vero, il che fa sì che il ciclo for salti tutto, quindi dai un'occhiata anche a quello.