J'ai un tableau d'ints. Je veux obtenir le deuxième nombre le plus élevé dans ce tableau. Y a-t-il un moyen facile de faire ceci?Comment obtenir le deuxième nombre le plus élevé dans un tableau dans Visual C#?
Répondre
Essayez cette (LINQ):
int secondHighest = (from number in numbers
orderby number descending
select number).Skip(1).First();
Vous ne spécifiez pas si vous voulez le faire avec la complexité minimale.
Si l'on suppose votre tableau non trié, s'il vous plaît voir: How to find the kth largest element in an unsorted array of length n in O(n)?
Pour trouver Nième plus grand élément dans un tableau non trié: Construire un tas max en O (n). Maintenant, retirez k éléments du tas; où chaque retrait coûte log (n) le temps de maintenir le tas. Temps total complexité = O (n + klogn)
Pour comprendre la construction de tas Max en O (n) voir Binary heap
Comment la complexité totale O (log k n) quand il y a un O (n) pas? –
Qui se soucie de la complexité toale ou des tas binaires quand vous pouvez faire ce que vous voulez simplement avec LINQ? : D – RCIX
Merci Jon. L'étape initiale pour construire le tas est O (n); les suppressions suivantes sont chacune O (logn). –
Oui, ont 2 vars (première et seconde) passthrough le tableau et chaque CompAir de temps ce que vous obtenez avec ces deux cellules (en mettant toujours le plus haut sur le premier et le deuxième le plus haut sur la seconde) avec un passage, vous obtiendrez le 2ème plus haut sur la deuxième var.
Vous pouvez trier la matrice et choisir l'élément au second index, mais la boucle O (n) suivante sera beaucoup plus rapide.
int[] myArray = new int[] { 0, 1, 2, 3, 13, 8, 5 };
int largest = int.MinValue;
int second = int.MinValue;
foreach (int i in myArray)
{
if (i > largest)
{
second = largest;
largest = i;
}
else if (i > second)
second = i;
}
System.Console.WriteLine(second);
vous pouvez aussi initialiser le plus grand et le deuxième à int.MinValue et faire aucune supposition;) – Martin
quel est le but de 'else if'? –
La boucle doit garder trace à la fois du plus grand et du deuxième entier le plus grand rencontré jusqu'ici. Le 'else if' gère le cas où le numéro de candidat n'est pas le plus grand, mais plutôt le deuxième plus grand qu'il a rencontré. –
int[] myArray = new int[] { 0, 1, 2, 3, 13, 8, 5 };
int num1=0, temp=0;
for (int i = 0; i < myArray.Length; i++)
{
if (myArray[i] >= num1)
{
num1 = myArray[i];
}
else if ((myArray[i] < num1) && (myArray[i] > temp))
{
temp = myArray[i];
}
}
Console.WriteLine("The Largest Number is: " + num1);
Console.WriteLine("The Second Highest Number is: " + temp);
Ces blocs de code résultent le plus haut ainsi que le deuxième nombre le plus élevé dans un tableau. –
ce concept ne fonctionne pas –
int[] arr = { 1, 8, 4, 5, 12, 2, 5, 6, 7, 1, 90, 100, 56, 8, 34 };
int first, second;
// Assuming the array has at least one element:
first = second = arr[0];
for(int i = 1; i < arr.Length; ++i)
{
if (first < arr[i])
{
// 'first' now contains the 2nd largest number encountered thus far:
second = first;
first = arr[i];
}
}
MessageBox.Show(second.ToString());
Votre Anwser est faux. Ça ne marchera pas. – gout
max1=0;
max2=0;
for(int i=0; i < a.Length; i++)
{
if (arr[i]> max1)
{
max2=max1;
max1=arr[i];
}
else
{
if (a[i]!= max1) && (a[i] > max2)
max2[i]=arr[i];
}
}
maintenant c'est un code de travail, merci –
static void Main(string[] args)
{
int[] myArray = new int[] { 0, 1, 2, 3, 13, 8, 5,12,11,14 };
int num1 = 0, temp = 0;
for (int i = 0; i < myArray.Length; i++)
{
if (myArray[i] >= num1)
{
temp = num1;
num1 = myArray[i];
}
else if ((myArray[i] < num1) && (myArray[i] > temp))
{
temp = myArray[i];
}
}
Console.WriteLine("The Largest Number is: " + num1);
Console.WriteLine("The Second Highest Number is: " + temp);
Console.ReadKey();
}
Obtenir le nombre maximum d'abord, une fois que le max est modifiée faire une comparaison par rapport à la deuxième nombre élevé pour voir si elle a besoin d'échanger. La seconde instruction if vérifie si la valeur est inférieure à la valeur max et est supérieure à la deuxième valeur la plus élevée. En raison du court-circuit, si la première condition échoue, il quitte le si et saute
static void Main(string[] args)
{
//int[] arr = new int[10] { 9, 4, 6, 2, 11, 100, 53, 23, 72, 81 };
int[] arr = { 1, 8, 4, 5, 12, 2, 5, 6, 7, 1, 90, 100, 56, 8, 34 };
int MaxNum = 0;
int SecNum = 0;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] > MaxNum)
{
if (MaxNum > SecNum) { SecNum = MaxNum; }
MaxNum = arr[i];
}
if (arr[i] < MaxNum && arr[i] > SecNum)
{
SecNum = arr[i];
}
}
Console.WriteLine("Highest Num: {0}. Second Highest Num {1}.", MaxNum, SecNum);
Console.ReadLine();
}
- 1. Récupérer le nombre le plus élevé dans un tableau récursivement en C#?
- 2. SQL: Obtenir l'enregistrement complet avec le nombre le plus élevé
- 3. Comment trouver l'employé avec le deuxième salaire le plus élevé?
- 4. MySql simple - Obtenir le plus grand nombre dans le tableau
- 5. Comment obtenir le nombre le plus élevé dans un résultat de requête Linq retourné?
- 6. Comment trouver le plus grand et le plus petit nombre dans un tableau en c
- 7. C#, Linq2SQL: Obtenir le plus élevé de chaque groupe
- 8. Trouvez le nombre entier le plus élevé dans une liste générique en utilisant C#?
- 9. SQL - Comment trouver le nombre le plus élevé dans une colonne?
- 10. Recherche du nombre le plus proche dans un tableau
- 11. Comment obtenir le numéro d'identification actuellement utilisé le plus élevé dans une table avec LINQ?
- 12. Filtrage en entier le plus élevé d'un tableau de liens
- 13. Utiliser ORDER et GROUP avec MySQL pour obtenir le nombre le plus élevé pour chaque GROUPE
- 14. php le plus proche nombre mineur dans le tableau
- 15. Java Algo à Trouver le plus petit et le deuxième plus petit nombre dans la liste
- 16. Obtenez le deuxième salaire le plus élevé des employés utilisant LINQ
- 17. Comment obtenir le handle du formulaire le plus élevé dans une application WinForm?
- 18. XPath pour obtenir l'élément le plus élevé ID
- 19. MySQL - deuxième séquence dans le tableau (par exemple par catégorie)
- 20. Obtenir le nombre d'éléments dans un pointeur vers un tableau char en C++
- 21. Comment compter le nombre de clés dupliquées dans un tableau?
- 22. Recherche du facteur premier le plus élevé d'un nombre composite en c
- 23. Nombre d'éléments dans le tableau statique et le tableau dynamique
- 24. Comment commander facilement un tableau du plus grand au plus petit dans Visual C#?
- 25. Écrire un nombre dans un tableau qui a le même nombre de comptes comme le nombre
- 26. Comment calculer correctement le nombre de niveaux dans un tableau?
- 27. Comment puis-je obtenir un nouveau tableau à partir du deuxième élément dans C#?
- 28. Lancer un processus avec le mode élevé ou non élevé
- 29. comment obtenir le point le plus proche d'un point dans un tableau de points?
- 30. Comment revenir à un niveau d'imbrication plus élevé dans ReST?
+ 1..LOL..Thats un bon. – Luke101
Vous devriez pouvoir remplacer '.ToList() [0]' par '.First()'. –
N'a pas pensé à ça, merci! – RCIX