0
votes

Fonction JavaScript pour trouver le deuxième élément le plus important dans un tableau

Je complète les 10 jours de Hackerrank de JavaScript. La question:

Écrivez une fonction pour prendre un tableau comme un argument, puis renvoyez le deuxième élément le plus important de la matrice. P> blockQuote>

J'ai écrit le code mais mon code renvoie le plus grand élément et non le deuxième plus grand comme demandé. P>

function getSecondLargest(nums) {
    // Complete the function
    var largest=nums[0];
    for(let i=1;i<nums.length;++i)
    {
        if(nums[i]>largest)
        largest=nums[i];
    }
    var large=nums[0];
    for(let j=1;j<nums.length;++j)
    {
        if(large<nums[j]&&large<largest)
        large=nums[j];
    }
    return large;
}


2 commentaires

Mais pourquoi cette logique complexe lorsque vous pouvez le faire en 2 lignes? Voir Stackoverflow.com/a/62058479/13531204


Vous avez raison, en fait, j'ai utilisé la manière ci-dessus, alors j'ai accepté cette réponse. Bien que les deux sont de grandes façons ... merci pour l'aide ...


5 Réponses :


0
votes

Si vous souhaitez éviter d'utiliser des fonctions de bibliothèque comme @ifaruki suggère, cette ligne

si (gros

devrait lire

si (gros

Tri et choisir la deuxième ou la deuxième valeur de la dernière fois échoue lorsqu'il y a des doublons de la valeur la plus élevée dans la matrice d'entrée.


0 commentaires

1
votes

Un simple changement mineur:

Utilisez nums [j] au lieu de gros dans la seconde pour la boucle p>

function getSecondLargest(nums) {
    // Complete the function
    var largest=nums[0];
    for(let i=1;i<nums.length;++i)
    {
        if(nums[i]>largest)
        largest=nums[i];
    }
    var large;
    
    //To ensure that the selected number is not the largest
    for(let j=0;j<nums.length;++j)
    {
        if (nums[j] !== largest){
            large = nums[j];
            break;
        }
    }
    for(let j=1;j<nums.length;++j)
    {
        if(large<nums[j]&&nums[j]!=largest)
            large=nums[j];
        else
            
        console.log(large)
    }
    return large;
}

var secondLargest = getSecondLargest([6,3,6,6,5]);
console.log("Second largest number", secondLargest);


2 commentaires

@Dhruv Bansal Checkout Cette réponse


@Dhruv Bansal a mis à jour la réponse selon ce cas d'utilisation où le premier numéro est le plus grand nombre.



0
votes
  • ne doit pas initialiser gros code> avec la première valeur var large = nums [0]; code> car il peut apparaître la plus grande valeur et ne fonctionnera pas li>
  • devrait utiliser nums [j] comme mentionné ci-dessus li>
  • Je pense pas avoir besoin d'une seconde boucle car tous les chèques peuvent être effectués dans la première boucle, et vous pouvez attribuer le plus grand prev au large à chaque fois que vous le modifiez: LI>

    p>

    function getSecondLargest(nums) {
      var largest = nums[0];
      var large;
      for (let i = 1; i < nums.length; ++i) {
        if (nums[i] > largest) {
            large = largest;
            largest = nums[i];
        } else if (nums[i] > large || typeof large === 'undefined') {
            large = nums[i]
        }
      }
      return large;
    }
    console.log(getSecondLargest([5,1-2,3]))
    console.log(getSecondLargest([-5,1,-2,3]))

0 commentaires

0
votes

Une autre logique la plus simple consiste à supprimer des doublons du tableau et de tri. P>

p>

let givenArray = [2, 3, 6, 6, 5];
let uniqueArray = [...new Set(givenArray)];

console.log("The second largets element is", uniqueArray.sort()[uniqueArray.length - 2]);

0 commentaires

1
votes

obtenez la deuxième plus grande

Première , je crée un nouveau tableau avec des valeurs uniques.

ARR = [ ... nouveau jeu (nums)];

second , valeur de tri en utilisant la fonction intégrée .sort () .

Remarque: par défaut .sort () trie toujours ascobétiquement, mais pour une témoignage, cela ne fonctionne pas. Donc, je mets (a, b) => {renvoie a - b} pour vous assurer qu'il fonctionnera correctement.

arr = arr.d.sort ((a, b) => {retour a-b});

troisième , obtenez la valeur de ARR

laisse résultat = arr [arr.l.length - 2] || arr [0];

enfin , renvoyer le résultat

Résultat de retour > xxx


4 commentaires

Je ne pense pas que cela fonctionne ... vous l'avez testé vous-même? Essayez [1, 2, 5] . S'il vous plaît fournir une explication


Merci @mz, étapes: 1. SECTR ARR ARR Créer une nouvelle matrice avec une valeur unique 2. Après avoir obtenu toutes les uniques, le tableau triera la valeur 3. laisser le résultat obtenir de la valeur. Si arr [arr.l.l.length - 2] est indéfini, le résultat est égal à arr [0] Arr [0] 4. Retour comme résultat


@Irwan, vous devriez ajouter cette explication à la réponse elle-même, plutôt que de tomber ici.


@annédroiïd merci de suggestion.