javascript - js, une question qui m'est soudainement venue à l'esprit lorsque je brossais leetcode
欧阳克
欧阳克 2017-06-12 09:28:19
0
3
589

La question que je posais concernait la suppression des doublons d'un tableau
La question vient de https://leetcode.com/problems...
Je l'ai accepté quand je le faisais, mais j'ai soudainement pensé à une question, comment puis-je le faire sans en ouvrir un nouveau ? Dans le cas d'un tableau, terminer la déduplication du tableau d'origine et renvoyer le tableau modifié ? ?
Voici le code que j'ai transmis

var removeDuplicates = function(nums) {
    if(nums === null || nums.length === 0) return 0;
    if(nums.length == 1) return 1;
    var count = 0;
    for(var i = 1 ; i < nums.length ; i++){
        if(nums[count] != nums[i]){
            count++;
            nums[count] = nums[i];
        }
    }    
    return ++count;
};

Au début, je pensais renvoyer nums.length à la fin, mais après y avoir réfléchi attentivement, j'ai réalisé que ce n'était pas une blague. Les nums originaux non modifiés doivent être renvoyés après l'avoir écrit de cette façon, alors j'ai commencé à réfléchir. sur la façon de renvoyer ce tableau numérique modifié, mais après avoir lu de nombreux articles sur la suppression de la duplication de tableau, je n'ai toujours pas trouvé la réponse. Veuillez me donner quelques conseils ! ! ! !

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

répondre à tous(3)
阿神

L'idée de supprimer les doublons in situ est très simple

  1. Créez un objet de hachage avec chaque élément du tableau comme clé

  2. Chaque élément est jugé par hachage s'il existe déjà dans le tableau

  3. S'il existe, supprimez l'élément

  4. Une fois le parcours terminé, déplacez les éléments du tableau pour combler les lacunes

Étant donné que le déplacement d'éléments d'un tableau est une opération coûteuse (par exemple, un tableau de N longueur est creusé uniformément par N/2 vides, alors la complexité temporelle du déplacement des éléments d'arrière en avant peut atteindre le niveau de N^2) , et cet algorithme n'est pas conforme à la tendance immuable actuelle, cette approche est donc ingrate et il n'est pas nécessaire de la faire dans des scénarios généraux.

刘奇

Cette question n'est pas une simple déduplication d'un tableau. Ce tableau est trié, ce qui est différent de la déduplication d'un tableau dans le désordre.

Dans la déduplication de tableau ordonnée, les mêmes éléments seront distribués ensemble, il vous suffit donc de déterminer si l'élément suivant est le même que l'élément précédent pendant le processus de parcours pour effectuer la déduplication.

Cette question était ma climatisation à l'époque

var removeDuplicates = function(nums) {
    var j = 0;
    var i = 0;
    for (; i < nums.length; i++) {
        if (nums[j] !== nums[i]) {
            nums[++j] = nums[i];
        }
    }
    return j+1;
};
小葫芦

const removeDuplicates=arr=>Array.from(new Set(arr))

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal