J'ai beaucoup de mal à comprendre comment faire ceci de façon récursive et diviser pour régner. Je pensais l'avoir eu il y a un moment, mais ce que j'ai essayé d'utiliser n'a pas fonctionné. J'ai un code qui le fait par O (n) mais ça ne marche pas car ça ne va pas s'appliquer à diviser pour régner. Voici le code O (n):Comment pourrais-je trouver les deux plus grands éléments d'une ArrayList en divisant et en vaincre?
public void find(ArrayList<Integer> list){
int first = 0;
int second = 0;
for(int n:list){
if(first < n){
second = first;
first = n;
} else if(second < n){
second = n;
}
}
J'ai essayé de modéliser ce après un tri rapide, mais trouvé que cela ne fonctionnerait pas dans un cas comme [4,3,6]
où il suffit de choisir 6 après pivotement sur les trois et immédiatement éliminer le 4, même si c'est le deuxième plus grand élément.
J'ai juste besoin d'aide pour le faire, je n'ai pas besoin de quelqu'un pour poster tout le code. Je veux essayer de comprendre par moi-même, mais j'ai toujours beaucoup de mal à comprendre comment y arriver.
Que diriez-vous en anglais: arrayMax() d'un tableau d'un seul élément est cet élément. Pour les tableaux plus grands, trouvez arrayMax() de la première moitié du tableau (jusqu'à l'index du milieu) et arrayMax() de la deuxième moitié du tableau (en commençant par l'index du milieu) et prenez le maximum numérique de ceux-ci. – danh