הנחה: לא צריך לשמור על התור המקורי כפי שהוא.
פתרון בשפת java
public static Queue<Integer> middleRanage(Queue<Integer> q)
{
Queue<Double> result = new Queue<Double>();
if(q.isEmpty())
return result;
int min=q.Remove();
int max = 0;
boolean searchMax = true;
while(!q.isEmpty())
{
if(searchMax && q.Head()<=min) // סדרה עם איבר בודד
{
result.insert( ((double)min) );
min = q.remove();
}
else if( searchMax && q.Head()>min) // יש מינימום, מיד לאחר מכן מחפשים מקסימום
{
max = q.Remove();
searchMax = false;
}
else if(!searchMax && q.Head()>max )// סדרה עם יותר משני איברים
{
max = q.Remove();
}
else if(!searchMax && q.Head()<max ) // מאפס את הסידרה
{
result.insert( ((double)(max)+min)/2 );
min = q.Remove();
searchMax = true;
}
}
if (searchMax) // אין לי מקסימום
result.insert( ((double)min) );
else // יש לי מקסימום
result.insert( ((double)(max)+min)/2 );
return result;
}