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?
Utilisateur non enregistré
Points
0
Adam Nathan
Points
160
Jeetendra Negi
Points
415
BogdanRB
Points
21
Considérez ce qui suit :
/// <summary>
/// Returns max value
/// </summary>
/// <param name="arr">array to search in</param>
/// <param name="index">index of the max value</param>
/// <returns>max value</returns>
public static int MaxAt(int[] arr, out int index)
{
index = -1;
int max = Int32.MinValue;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] > max)
{
max = arr[i];
index = i;
}
}
return max;
}
Utilisation :
int m, at;
m = MaxAt(new int[]{1,2,7,3,4,5,6}, out at);
Console.WriteLine("Max: {0}, found at: {1}", m, at);
Branko Dimitrijevic
Points
28493
Voici une solution LINQ qui est O(n) avec des facteurs constants décents :
int[] anArray = { 1, 5, 2, 7, 1 };
int index = 0;
int maxIndex = 0;
var max = anArray.Aggregate(
(oldMax, element) => {
++index;
if (element <= oldMax)
return oldMax;
maxIndex = index;
return element;
}
);
Console.WriteLine("max = {0}, maxIndex = {1}", max, maxIndex);
Mais vous devriez vraiment écrire un explicite for
lop si vous vous souciez des performances.