Caro Vale, credo che implementare un insieme di numeri utilizzando solo un array di booleani dinamico, senza l'aiuto di strutture d'appoggio, ti sia praticamente impossibile.
A mio modo di vedere i casi sono due: o rischi di rendere la computazione lunghissima o finisci la memoria. Mi spiego...
Se riallochi l'array quando rimuovi l'elemento più grande (nomearray.length-1), della lunghezza del secondo elemento più grande, risparmi memoria pagando però il costo dell'allocazione. Se allochi un array da 800milioni di elementi un po' ci mette, e se fai allocazioni e rimozioni in serie di un valore così alto come test, il tuo pc avrà da fare per molto tempo...
Se invece, ogni volta che inserisci un elemento maggiore della lunghezza dell'array, ne allochi uno nuovo, senza però allocarne uno più piccolo quando rimuovi l'elemento maggiore, arriverai ad un punto in cui la memoria ti finisce e il programma terminerà con un'eccezione di memoria heap terminata.
Siccome il programma di test che ti hanno fornito fa per un milione di volte l'inserimento e la rimozione del numero 800milioni, se ad ogni rimozione allochi un array più piccolo per poi riallocare quello da 800milioni durante l'inserimento, non finisci più. Però non puoi nemmeno lasciare l'array allocato, perchè un test successivo di quel programma si crea un array di 100mila insiemi, inizializza il primo insieme con il numero 10, e inserisce a quelli successivi il max del precedente+1, cioè fino a 100010. Ovviamente la memoria non basta. Perciò chiedi al professor R cos'altro puoi usare oltre all'array di booleani (dato che se nn ricordo male non puoi usare strutture della API di Java).
Facci sapere... Ciao.