J'ai donc un tableau numérique non trié int[] anArray = { 1, 5, 2, 7 };
et j'ai besoin d'obtenir à la fois la valeur et l'index de la plus grande valeur dans le tableau qui serait 7 et 3, comment dois-je faire ?
Réponses
Trop de publicités?
asr
Points
706
Lesair Valmont
Points
470
Une phrase succincte :
var (number, index) = anArray.Select((n, i) => (n, i)).Max();
Cas de test :
var anArray = new int[] { 1, 5, 7, 4, 2 };
var (number, index) = anArray.Select((n, i) => (n, i)).Max();
Console.WriteLine($"Maximum number = {number}, on index {index}.");
// Maximum number = 7, on index 2.
Caractéristiques :
- Utilise Linq (pas aussi optimisé que vanilla, mais la contrepartie est moins de code).
- N'a pas besoin d'être trié.
- La complexité informatique : O(n).
- Complexité de l'espace : O(n).
Remarques :
- Assurez-vous que le numéro (et non l'index) est le premier élément du tuple, car le tri des tuple est effectué en comparant les éléments du tuple de gauche à droite.
Mr. Jefferson
Points
2742
Si l'index n'est pas trié, vous devez itérer dans le tableau au moins une fois pour trouver la valeur la plus élevée. J'utiliserais un simple for
boucle :
int? maxVal = null; //nullable so this works even if you have all super-low negatives
int index = -1;
for (int i = 0; i < anArray.Length; i++)
{
int thisNum = anArray[i];
if (!maxVal.HasValue || thisNum > maxVal.Value)
{
maxVal = thisNum;
index = i;
}
}
Cette méthode est plus verbeuse que celle utilisant LINQ ou d'autres solutions à une ligne, mais elle est probablement un peu plus rapide. Il n'y a vraiment aucun moyen de rendre cette méthode plus rapide que O(N).
millimoose
Points
22665
- Réponses précédentes
- Plus de réponses