הנחה: לא צריך לשמור על התור המקורי כפי שהוא.

קישור לשאלה

פתרון בשפת 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;

        

}