меня спросили в интервью:Push, Pop, Диапазон в постоянное время
дизайна структура данных, которая позволяет все эти операции в постоянном, O(1)
, время:
- вытолкнуть элемент
- Поп-элемент
- Диапазон элементов: найдите наименьший диапазон интервалов текущих элементов.
Например. Диапазон[1, 22, 44, 56, 99, 98, 56]
-98
.
Я разработал это, используя пользовательский стек с двумя переменными, max
и min
, но это не работает после Pop'ing на мин или макс элемент.
Что я пробовал:
Я использовал стек с двумя дополнительными переменной макс и мин:
DS
{
top, //Top of the Stack
min, //Min till now
max //Max till now
}
Push(DS, elem)
Push_Stack(DS.top, elem)
if elem < DS.min
DS.min = elem
if elem > DS.max
DS.max = elem
Range(DS)
return DS.max - DS.min
Pop(DS)
x = Pop_Stack(DS.top)
if (x == DS.min)
DS.min = Find_New_Min(DS.top) //This takes linear time using this approach
if (x == DS.max)
DS.max = Find_New_Max(DS.top)
Пожалуйста, не просто попросите нас решить проблему за вас. Покажите нам, как _you_ попытался решить проблему самостоятельно, а затем покажите нам _exactly_, каким был результат, и скажите, почему вы считаете, что это не сработало. См. «Что вы пробовали?] (http://whathaveyoutried.com/) «за отличную статью, которую вам действительно нужно прочитать. –
@mohit Я думаю, что вы предложили на самом деле возможный ответ. Вам просто нужно обновить max и min после толчка или поп – Alireza
Похоже, что общая идея хорошая. Покажите свой код (псевдокод будет делать). Что именно не сработало? –