Ho ricevuto una domanda di intervista e il mio algoritmo ha superato solo casi di test esemplificativi e non ha superato tutti i casi di test.Somma di array unica minima
Domanda: Dato un array intero ordinato, restituisce la somma dell'array in modo che ogni elemento sia univoco aggiungendo alcuni numeri per duplicare gli elementi in modo tale che la somma di elementi univoci sia minima.
I.e., se tutti gli elementi dell'array sono univoci, restituire la somma. Se alcuni elementi sono duplicati, incrementali per assicurarti che tutti gli elementi siano univoci in modo che la somma di questi elementi univoci sia minima.
Alcuni esempi:
input1[] = { 2, 3, 4, 5 }
=>return 19
= 2 + 3 + 4 + 5 (tutti gli elementi sono unici, quindi basta sommare)input2[] = { 1, 2, 2 }
=>return 6
= 1 + 2 +3 (indice 2 è duplicato, così incrementarlo)input3[] = { 2, 2, 4, 5 }
=>return 14
= 2 + 3 + 4 + 5 (indice 1 è duplicato, così incrementarlo)
Questi tre sono esempi nella domanda, il mio semplice algoritmo è il seguente e ha passato i tre esempi forniti, ma non ha superato altri casi in cui non sono riuscito a vedere gli input.
static int minUniqueSum(int[] A) {
int n = A.length;
int sum = A[0];
int prev = A[0];
for(int i = 1; i < n; i++) {
int curr = A[i];
if(prev == curr) {
curr = curr+1;
sum += curr;
}
else {
sum += curr;
}
prev = curr;
}
return sum;
}
non ho potuto vedere gli altri ingressi che questo algoritmo non è riuscita. Quello che mi viene in mente altri esempi di ingresso sono
{1, 1, 1, 1} --> {1, 2, 3, 4}
{1, 1, 2, 2, 3, 3, 3} --> {1, 2, 3, 4, 5, 6, 7}
{1, 2, 4, 4, 7, 7, 8} --> I think this should be {1, 2, 3, 4, 6, 7, 8} and my algorithm fails in this example because my algorithm has {1, 2, 4, 5, 7, 8, 9} whose sum is not minimum
Quali sono alcuni altri casi di test e un algoritmo che può passare tutti i casi?
Alcune persone si lamentano che la domanda non è chiara. Vorrei farti sapere del problema. Non c'era una chiara descrizione del numero aggiunto se sarà permesso solo positivo, positivo o negativo. Dati tre esempi con input e output e altri casi di input e output che non è possibile vedere, scrivere un programma per passare anche tutti gli altri casi di input/output non visti. Questa era la domanda.
Nel tuo ultimo test-case, si sta rimuovendo 1 dal 2 ° indice. Tuttavia, nella tua domanda dici che puoi renderlo unico solo aggiungendo "numeri minimi se duplicati". – MathBunny
In che modo '{1, 2, 4, 7, 7, 8}' diventa '{1, 2, 3, 4, 6, 7, 8}' se è permesso solo aggiungere ai numeri? –
Quindi è possibile aggiungere numeri negativi purché l'array rimanga ordinato? – stark