recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - js, une question qui m'est soudainement venue à l'esprit lorsque je brossais leetcode

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 ! ! ! !

欧阳克欧阳克2728 Il y a quelques jours597

répondre à tous(3)je répondrai

  • 阿神

    阿神2017-06-12 09:30:19

    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.

    répondre
    0
  • 怪我咯

    怪我咯2017-06-12 09:30:19

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

    répondre
    0
  • 高洛峰

    高洛峰2017-06-12 09:30:19

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

    répondre
    0
  • Annulerrépondre