J'ai donné un tableau Je serais reconnaissant pour des suggestions sur la façon de calculer le résultat souhaité. P> ARR code> d'entiers triés par ordre croissant ou décroissant. Si arr compte code> contient au moins deux éléments distincts, j'ai besoin de trouver le plus long arr.last (n) code> qui comporte exactement deux éléments distincts (c'est-à-dire avec le plus grand n code>). Sinon, il devrait retourner ar code>. Quelques exemples sont: P>
arr = [6, 4, 3, 2, 2] code>, puis [3, 2, 2] code> doit être retourné li>
arr = [6, 4, 3, 3, 2] code>, puis [3, 3, 2] code> doit être retourné li>
arr = [1] code>, puis arr compte code> doit être retourné. LI>
ul>
3 Réponses :
Voici une approche assez inefficace qui utilise Il peut être amélioré à l'aide d'un Take_while code> : SET code> qui est automatiquement unique: p> last_non_dupe([6, 4, 3, 2, 2])
# => [3, 2, 2]
Le Une bibliothèque énumérable a une quantité incroyable d'outils, prenez donc un certain temps regarder à travers ce qu'il offre. Il y a généralement quelque chose pour chaque occasion.
enum2 = enum0.lazy #=> #<Enumerator::Lazy: #<Enumerator: [6, 4, 3, 2, 2]:reverse_each>> enum3 = enum2.chunk(&:itself) #=> #<Enumerator::Lazy: #<Enumerator: # #<Enumerator::Generator:0x00005c29bdf48cb8>:each>> enum3.to_a #=> [[2, [2, 2]], [3, [3]], [4, [4]], [6, [6]]] a = enum3.first(count) #=> [[2, [2, 2]], [3, [3]]] b = a.flat_map(&:last) #=> [2, 2, 3] b.reverse #=> [3, 2, 2]
C'est le meilleur que je puisse penser, aussi.
Pas sûr de l'efficacité, mais voici une autre façon de le faire:
arr = [6, 4, 3, 2, 2]
uniq = arr.uniq.last(2) # => [3, 2]
arr.select{|e| uniq.include?(e)} # => [3, 2, 2]
Désolé, mais que voulez-vous dire avec "deux derniers entiers non uniques"?
Le résultat montre les 3 derniers entiers de chaque tableau et vous dites que vous voulez 2 derniers entiers? Combien en voulez-vous?
@Sebastianpalma édité
Pour plus de clarté, qu'est-ce que
[1,2,3,4] code>,[1,3,2,3] code>,[] code> et < Code> [0] code> retour?@Jedi a été édité
@tadman a été édité
Lorsque vous décrivez des problèmes comme celui-ci, il convient de décrire ce qui se passe dans des cas de bord, pas des cas idéaux.
"Veuillez conseiller sur la meilleure et élégante approche de la tâche suivante:" - Vous le faites en écrivant un programme qui fait cela. Si vous rencontrez un problème avec votre programme, lisez attentivement la documentation de toutes les méthodes, classes, modules et bibliothèques que vous utilisez, rédigez des tests pour vos programmes, tracez l'exécution avec stylo et papier, à un pas en avant dans un débogueur, Ensuite, dormez dessus, recommencez à partir du début, dormez à nouveau, et alors et seulement alors i> resserrez votre problème à une concise, ciblée, simple, courte, reproductible EXEMPLE REPRODUCIBLE MININIMAL et posez une question spécifique, ciblée et étroite sur débordement de pile a>.
Aussi, demandant des "meilleurs" et "élégant" est hautement subjectif et basé sur l'opinion, qui est hors topic sur débordement de pile selon le Centre d'aide . Vous devez donner une définition exacte, précise, objectivement mesurable et sans ambiguïté de ce que vous entendez par «meilleur» et «élégant».
Anton, j'ai confiance que vous ne vous dérange pas de mon édition à votre question. Je crois que ma compréhension de la question est correcte à la lumière de votre commentaire sur la réponse de @ Tadman, mais sinon, corrigez mon édition ou de retourner à votre question initiale. J'ai fait la modification parce que vous étiez martelé avec des bowvotes et un vote pour fermer (probablement parce que les lecteurs ont trouvé votre question peu claire), mais ce n'est pas une mauvaise question.
Plus loin sur le commentaire de @ Jörg sur "Best" et "Élégant", mis à part le fait qu'ils sont des termes subjectifs, ce n'est pas nécessaire, car beaucoup de gens ici s'efforcent toujours de donner la réponse la plus élégante qu'ils puissent penser, que ce soit demandé de le faire.
@CarySwoveland J'ai semblé avoir foiré votre précédente modification. Pardon. Merci pour la correction.
@sawa ne pas s'inquiéter. Votre édition a été une amélioration, juste une surveillance mineure.
@ Jörgwmittag, je crains que je devienne vieux et mourrai dormir sur le papier. Vous devez admettre et traiter le fait des nouveaux arrivants à la recherche de solutions les plus rapides et les plus rapides, car il s'agit d'une initiative commerciale pure pour produire des kilotons de projets MVP englobant littéralement tout le monde. Malheureusement, un top Notch professionnels comme vous ne couvrira pas tout. Si vous remarquerez une chronologie et des questions, je pose une question une fois par an. Merci pour votre conseil, j'essaie d'éduquer, de lire et de vérifier constamment des documents. Je cherchais de l'aide la nuit, étant fatiguée et demandant de l'aide, ayant peu d'approches à l'esprit.