Beste Weg zu finden, die Anzahl der Paare in einem array, dessen Differenz ist k

War ich der Lösung des Problems auf hackerrank. Ich hatte zwei Ansätze in meinem Kopf :

input : unsortierter array(a) und k

Erster Ansatz :

1) Sortieren Sie das array

2) für jedes array-element a[i] ,suchen Sie nach dem element a[i]+K unter Verwendung der binären Suche.Wenn gefunden increament der Graf und break die innere Schleife.

Zweiter Ansatz :

1) Sortieren Sie das array

2) für jedes array-element a[i] ,suchen Sie nach dem element a[i]+K mit linearsearch.Wenn gefunden increament der Graf und break die innere Schleife.

Fand ich den Ersten Ansatz besser zu sein, als es das problem zu lösen in n(logn). Aber wenn mehrere test-Fälle sind auf die Lösungen der Ansatz 2 nimmt weniger Zeit . Kann jemand bitte erklären, warum ?

Unten sind die Codes für die beiden Ansätze :

Ersten Ansatz Code :

static int pairs(int[] a,int k) {
  /* Complete this function */
    int temp;
    int len=a.length;
    int count=0;
    int beg;
    int mid;
    int end;
    int midVal;
    Arrays.sort(a);
    for(int i=0;i<len-1;i++){
    temp=a[i]+k;
    beg=i+1;  
    end=len-1;
        for(int l=beg;l<len;l++){
            mid=(beg+end)/2;
            midVal=a[mid];
            if(midVal==temp){
                count++;
                break;
            }
            else if(midVal>temp){
                end=mid-1;
            }
            else{
                beg=mid+1;
            }
        }

    }
    return count;
}

Zweite Ansatz Code :

static int pairs(int[] a,int k) {
  /* Complete this function */
    int temp;
    int len=a.length;
    int count=0;
    Arrays.sort(a);
    for(int i=0;i<len;i++){
    temp=a[i];
        for(int j=i+1;j<len;j++){
            if(temp-a[j]==-k){
                count++;
                break;
            }
        }
    }
    return count;
}
Duplizieren: Hier ist der beste Ansatz stackoverflow.com/questions/4720271/...

InformationsquelleAutor Sahil Gupta | 2013-11-24

Schreibe einen Kommentar