Una questione intervista:Scambia gli elementi di due sequenze, in modo tale che la differenza delle somme degli elementi sia minima.
Date due sequenze interi non ordinate
a
eb
, la loro dimensione è n, tutti numeri sono scelti a caso: scambiare gli elementi dia
eb
, tali che la somma degli elementi dia
meno la somma degli elementi dib
è minima.
Dato l'esempio:
a = [ 5 1 3 ]
b = [ 2 4 9 ]
Il risultato è (1 + 2 + 3) - (4 + 5 + 9) = -12.
Il mio algoritmo: ordinali insieme, quindi inserisci il primo più piccolo n
in a
e lasciato in b
. È O (n lg n) nel tempo e O (n) nello spazio. Non so come migliorarlo con un algoritmo con O (n) nel tempo e O (1) nello spazio. O (1) significa che non abbiamo bisogno di più spazio extra eccetto seq 1 e 2 stessi.
Qualche idea?
Una domanda alternativa sarebbe: Cosa fare se è necessario ridurre al minimo il valore assoluto delle differenze (minimizzare |sum(a) - sum(b)|
)?
Un pensiero Python o C++ è preferito.
suona come un lavoro. Se è così, si prega di taggare di conseguenza. – celtschk
Non può essere O (1) nello spazio se si considerano gli elenchi originali aeb. Se non li si considera, è sufficiente scambiare direttamente i valori. In entrambi i casi, fornire maggiori dettagli nella domanda. – GaretJax
@GaretJax, Come scambiare in modo efficiente con O (n) tempo? – user1002288