Ich versuche ein Problem zu lösen, das kleinste und zweitkleinste Element in einem Array zu finden.Mehrere Iterationen in einer While-Schleife ausführen
Ich denke darüber nach, zwei Zeiger auf den 0. Index des Arrays zu setzen. Beide Zeiger bewegen sich von links nach rechts und durchqueren das gesamte Array. Der erste Zeiger ptr1 bestimmt das min-Element, während der zweite Zeiger das zweite min-Element bestimmen soll. Der erste Zeiger funktioniert, aber der zweite Zeiger wird nicht durchlaufen. While-Schleife endet erst nach 1 Iteration des zweiten Zeigers.
Ist es möglich, n Zeiger in einer while-Schleife haben & sie durch wiederum nach rechts abbiegen von links überqueren machen ?
Oder ich mache etwas falsch.
Unten ist der Code
int arr[] = {12,13,1,10,34,1};
int ptr1 = 0;
int ptr2 =0;
int min = Integer.MAX_VALUE;
int minSec = Integer.MAX_VALUE;
int arrLen=arr.length-1;
while(ptr1<arrLen && ptr2<arrLen){
if(arr[ptr1]<min){ // this if works great finds the min element
min=arr[ptr1];
ptr1++;
}else{
ptr1++;
}
//flow enters once & exits the while loop
if(ptr1==arrLen && arr[ptr2]<minSec && arr[ptr2]>min){
minSec=arr[ptr2];
ptr2++;
}else if(ptr1==arrLen){
ptr2++;
}
}
System.out.println("min: " + min + " second min: "+ minSec)
Ausgang: min: 1 second min: 12
die korrekte Ausgabe min: 1 second min: 10
sein soll ich bin in der Lage, das Problem mit einem anderen Ansatz zu lösen, Code unten. Ich muss nur über den While-Loop-Ansatz wissen.
for (int i = 0; i <= arrLen ; i ++)
{
/* If current element is smaller than first
then update both first and second */
if (arr[i] < min)
{
minSec = min;
min = arr[i];
}
/* If arr[i] is in between first and second
then update second */
else if (arr[i] < minSec && arr[i] != min)
minSec = arr[i];
}
Was zeigt der Debugger? –
debugger gibt nur die zweite ein, wenn sie einmal gesetzt ist, setzt das secondMin und beendet die while-Schleife – underdog
Ihr zweiter Ansatz macht mehr Sinn (anders als 'i <= arrLen') und hat eine bessere Laufzeit. Warum brauchen Sie den ersten Ansatz? –