Использование UIWebView для отображения и просмотра журнала

Хорошо, вот одно решение.

Сначала нам нужны некоторые вещи, которые предоставляют push_back (), push_front (), pop_back () и pop_front () в 0 (1). Его легко реализовать с помощью массива и 2 итераторов. Первый итератор будет указывать на фронт, второй на спину. Давайте назовем такой материал deque.

Вот псевдокод:

class MyQueue//Our data structure
{
    deque D;//We need 2 deque objects
    deque Min;

    push(element)//pushing element to MyQueue
    {
        D.push_back(element);
        while(Min.is_not_empty() and Min.back()>element)
             Min.pop_back();
        Min.push_back(element);
    }
    pop()//poping MyQueue
    {
         if(Min.front()==D.front() )
            Min.pop_front();
         D.pop_front();
    }

    min()
    {
         return Min.front();
    }
}

Объяснение:

Пример давайте нажимаем числа [12,5,10,7 , 11,19] и нашему MyQueue

1) нажатие 12

D [12]
Min[12]

2) нажатие 5

D[12,5]
Min[5] //5>12 so 12 removed

3) нажатие 10

D[12,5,10]
Min[5,10]

4) нажатие 7

D[12,5,10,7]
Min[5,7]

6) нажатие 11

D[12,5,10,7,11]
Min[5,7,11]

7) нажатие 19

D[12,5,10,7,11,19]
Min[5,7,11,19]

Теперь давайте назовем pop_front ()

, мы получили

 D[5,10,7,11,19]
 Min[5,7,11,19]

Минимум 5

Давайте снова вызовите pop_front ()

Объяснение : pop_front удалит 5 из D, но также добавит передний элемент из Min, потому что он равен переднему элементу D (5).

 D[10,7,11,19]
 Min[7,11,19]

И минимально 7.:)

1
задан Nimrod 18 October 2010 в 01:30
поделиться