Non va tanto bene... nel senso che, ti serve creare un array di LinkedList? Ti viene chiesto di ritornarne UNA, contenente gli elementi pari della colonna contenente il maggior numero di elementi pari.
Quindi partiamo dal presupposto che creeremo una sola LinkedList. Adesso dividiamo il problema in sottoproblemi maneggiabili: da colonnaMaxPari(int[][] m) che ritorna la LinkedList:
codice:
public LinkedList colonnaMaxPari(int[][] m) {
LinkedList ll = new LinkedList();
/*
codice corpo
*/
return ll;
}
Che cosa andrà al posto di "codice corpo".
All'inizio, non sappiamo quale sia la colonna contenente il maggior numero di elementi pari, né tanto meno quanti essi siano... allora come pivot possiamo prendere la prima colonna (indice 0) e supponiamo che vi siano 0 elementi pari
codice:
int max_index = 0;
int max_pari = 0;
Adesso dobbiamo andare ad analizzare la nostra matrice, per colonne, e contare quanti siano effettivamente gli elementi pari di ciascuna colonna. Per contare gli elementi pari, ci appoggiamo ad una variabile int temp_pari che andiamo ad incrementare man mano che troviamo un elemento pari
codice:
for (int i = 0; i < m[0].length; i++) {
int temp_pari = 0;
for (int j = 0; j < m.length; j++) {
temp_pari += (m[j][i] % 2 == 0 ? 1 : 0); //se è pari aumento di 1
}
// altro codice...
}
Dopo il ciclo for interno, in
//altro codice
andiamo ad aggiornare l'indice di colonna (i) contenente il maggior numero di pari ed anche il massimo numero di elementi pari trovati
codice:
max_index = (temp_pari > max_pari ? i : max_index);
max_pari = (temp_pari > max_pari ? temp_pari : max_pari);
Siamo ad un passo dalla fine del metodo: popolare la LinkedList ll con gli elementi pari della colonna contenente il massimo numero di elementi pari:
codice:
for (int i = 0; i < m.length; i++) {
if (m[i][max_index] % 2 == 0) {
ll.add(m[i][max_index]);
}
}
In definitiva, mettendo tutto insieme, una possibile implementazione del metodo maxColonnaPari potrebbe essere:
codice:
public LinkedList colonnaMaxPari(int m[][]) {
int max_index = 0;
int max_pari = 0;
for (int i = 0; i < m[0].length; i++) {
int temp_pari = 0;
for (int j = 0; j < m.length; j++) {
temp_pari += (m[j][i] % 2 == 0 ? 1 : 0);
}
max_index = (temp_pari > max_pari ? i : max_index);
max_pari = (temp_pari > max_pari ? temp_pari : max_pari);
}
for (int i = 0; i < m.length; i++) {
if (m[i][max_index] % 2 == 0) {
ll.add(m[i][max_index]);
}
}
return ll;
}