Maison > Java > JavaQuestions d'entretien > le corps du texte

Application du tri par fusion dans l'interview Java

王林
Libérer: 2020-11-18 15:41:48
avant
2219 Les gens l'ont consulté

Application du tri par fusion dans l'interview Java

Contexte de l'article :

En examinant les algorithmes et les structures de données, j'ai trouvé les questions du test écrit de l'entretien. Jetons un coup d'œil aux questions :

<.> (Apprendre le partage vidéo :

vidéo pédagogique Java)

Deux nombres dans le tableau, si le premier nombre est supérieur au dernier nombre, alors les deux nombres forment une paire d'ordre inverse . Saisissez un tableau et recherchez le nombre total de paires d’ordre inverse P dans le tableau. Et affichez le résultat de P modulo 1000000007. Autrement dit, sortie P%1000000007

Description de l'entrée :

La question garantit que le même nombre n'est pas dans le tableau d'entrée

Plage de données :

Pour %50 données, taille<=10^4

Pour %75 données, taille<=10^5

Pour %100 données, taille<=2*10^5

Analyse :

Cette question est facile à résoudre directement, mais la complexité temporelle est o(n*n). Quand j'ai reçu cette question pour la première fois, je n'y ai pas pensé, alors je viens de terminer. en l'écrivant via dp, puis j'ai découvert que dp était toujours disponible. Il est préférable de le résoudre directement, ce qui a une complexité de O(n*n), et dp prend également 2*10^5 d'espace. une solution directe. La méthode et dp ont expiré.

(Recommandations pour des questions d'entretien plus connexes :

questions et réponses d'entretien Java)

Partage de code :

  //直接求法 ,超时
public  class solution{
   public static  int sum;
   
   public static int InversePairs(int [] array) {
        dp(array);
        return sum;
   }
   
 
   public static void dp(int []array){
       for(int i = array.length - 1 ; i >  0 ; i --){
           for(int j = i - 1 ; j >= 0 ; j--){
                if(array[j] > array[i]){
                	sum += 1;
                } 
           }
           sum %= 1000000007;
       }
       
   }
}
Copier après la connexion
rrree

dp est redondant ici,

Voici le problème à résoudre par le tri par fusion. Si vous ne comprenez pas le tri par fusion, vous pouvez lire mon blog précédent

Tri par fusion :

public  class solution{
 
  //一维数组dp   
   public static  int sum;
   
   public static int InversePairs(int [] array) {
        dp(array);
        return sum;
   }
   public static int count[] = new int[200004];
   
   public static void dp(int []array){
       for(int i = array.length - 1 ; i >  0 ; i --){
           for(int j = i - 1 ; j >= 0 ; j--){
                if(array[j] > array[i]){
                	count[j] = count[j+1]+1;
                }else {
                	count[j] = count[j+1];
                }
           }
           sum += count[0];
           sum %= 1000000007;
           for(int k = 0 ; k < array.length ; k ++)
        	   count[k] = 0;
       }
       
   }
    
}
Copier après la connexion

Recommandations associées :

Tutoriel d'introduction à Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal