Se su 7 partite se ne devono avere 4 in casa e 3 fuori o viceversa, l'implementazione dell'algoritmo è chiaramente sbagliata, anche la versione JS ha lo stesso problema, quella Java non l'ho provata, ma suppongo dia lo stesso risultato.
Alternative già pronte non ne conosco, se non se ne trovano puoi sempre crearti uno script tuo, non starti a preoccupare di ottimizzazione, tanto il numero di squadre non sarà mai tanto alto da farti notare differenze di prestazione tra un algoritmo scritto coi piedi (purché funzionante) e uno iper-ottimizzato.