Ho avuto un'intervista per un lavoro di sviluppo Jr. e mi ha chiesto di scrivere una procedura che richiede una serie di intarsi e spinge gli zeri alla schiena. Qui ci sono i vincoli (che lui non mi ha detto all'inizio .... Come spesso accade nelle interviste di programmazione, ho imparato i vincoli del problema, mentre ho risolto lol):Buone soluzioni C++ agli interrogatori "Portare tutti gli zeri sul retro dell'array"
- dovuto farlo a posto; senza la creazione di array temporaneo, nuovi array, ecc
- Non è necessario conservare l'ordine dei numeri diversi da zero (Vorrei che avrebbe fatto mi ha detto questo, all'inizio)
Setup:
int arr[] = {0, -2, 4, 0, 19, 69};
/* Transform arr to {-2, 4, 19, 69, 0, 0} or {69, 4, -2, 19, 0, 0}
or anything that pushes all the nonzeros to the back and keeps
all the nonzeros in front */
La mia risposta:
bool f (int a, int b) {return a == 0;}
std::sort(arr, arr+sizeof(arr)/sizeof(int), f);
Quali sono alcune altre buone risposte?
penso che la tua risposta è grande. Cosa ha detto l'intervistatore? –
"Voglio mettere le cose da questa parte e le altre cose da questa parte." Questo è 'std :: partition', a mani basse. Vedi la mia risposta. – PaulMcKenzie
La vostra chiamata a 'std :: sort' non è valida, perché la funzione di confronto non stabilisce un [rigoroso ordine debole] (http://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings). –