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; }
5 Réponses :
Si vous souhaitez éviter d'utiliser des fonctions de bibliothèque comme @ifaruki suggère, cette ligne p>
devrait lire p>
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. P> si (gros si (gros
Un simple changement mineur:
Utilisez nums [j] gros 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);
@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.
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])) 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]);
second strong>, valeur de tri en utilisant la fonction intégrée Remarque: par défaut enfin strong>, renvoyer le résultat p> ARR = [ ... nouveau jeu (nums)]; code> strud> p> .sort () Code>. P> .sort () code> trie toujours ascobétiquement, mais pour une témoignage, cela ne fonctionne pas. Donc, je mets (a, b) => {renvoie a - b} code> pour vous assurer qu'il fonctionnera correctement. P> arr = arr.d.sort ((a, b) => {retour a-b}); code> strong> p> ARR Code> p> laisse résultat = arr [arr.l.length - 2] || arr [0]; code> strong> p> Résultat de retour code> > strong> p>
Je ne pense pas que cela fonctionne ... vous l'avez testé vous-même? Essayez [1, 2, 5] code>. S'il vous plaît fournir une explication
Merci @mz, étapes: 1. SECTR ARR ARR CODE> 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 code> obtenir de la valeur. Si arr [arr.l.l.length - 2] code> est indéfini, le résultat est égal à arr [0] Arr [0] code> 4. Retour code> 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.
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 ...