Wir erhalten ein Array bestehend aus N Zahlen und einer Zahl X. Wir müssen einen Index K in diesem Array finden, der das Array in zwei Teile teilt (0 bis K-1 und K-1 bis N-1) als solche:Array-Codierungs-Herausforderung, die in O (n) -Komplexität gelöst werden muss
Anzahl der Elemente gleich X im ersten Teil = Anzahl der Elemente ungleich X im zweiten Teil.
Beispiel:
A = (5, 5, 1, 2, 3, 4, 5), X = 5 Answer: K= 4 (5, 5, 1, 2) contains two X's. (3, 4, 5) contains two non X's.
Solche K existiert immer entsprechend der Problembeschreibung. Die Lösung muss eine O (N) -Komplexität aufweisen. O (N^2) Lösung ist zu einfach, aber ich konnte das O (N) nicht finden.
Hier ist, was ich bisher habe:
int function(int X, vector<int> &A) {
int k = 0;
vector<int> indices;
long count = A.size();
int number_of_x= 0;
for(int i=0;i<count;i++){
if(A[i]==X)
number_of_x++;
}
long part_one_x = 0;
long part_two_nonx = 0;
for(int i=0;i<count;i++){
if(A[i]==X)
part_one_x++;
part_two_nonx = (count-i) - (number_of_x - part_one_x);
if(part_one_x == part_two_nonx)
k = i;
}
return k;
}
Vielen Dank für Ihre Hilfe!
Hinweis: Machen Sie einen ersten Durchlauf durch das Array und zählen Sie die Anzahl der Xs. Dann finden Sie die Antwort auf den zweiten Durchgang. – samgak
Die Aufgabe soll von Ihnen erledigt sein. Versuchen Sie es selbst zu lösen und stellen Sie spezifische Fragen, wenn Sie ein Problem haben. – Jeet
Jeetendra, die Frist ist bereits abgelaufen, und es ist eine Codierung Herausforderung, zu der ich keinen Zugang habe. Es ist mir nur eingefallen. Samgak, ich tat wie du sagtest, aber ich wusste nicht, was ich im zweiten Durchgang machen sollte. –