Реализую поиск минимума в очереди, но столкнулся с проблемой, что на больших массивах слишком долго работает. Подскажите, пожалуйста, можно ли ускорить?
struct Node {
int data = 0;
Node* next = nullptr;
};
struct Queue {
Node* head = nullptr;
Node* tail = nullptr;
int q_size = 0;
bool is_empty() {
return this->head == nullptr;
}
int min() {
int min;
Node* temp = this->head;
min = temp->data;
int help = this->q_size;
while (help) {
if (temp->data < min)
min = temp->data;
temp = temp->next;
--help;
}
return min;
}
};
Сделайте стек, хранящий пары элемент/минимум от дна до данного элемента
add(value) {
curmin = min(curmin, value)
stack.push(pair(value, curmin))
}
stackmin() {
return stack.top().second
}
А теперь возьмите два таких стека и на их основе сделайте очередь:
queuemin()
return min(instack.stackmin(), outstack.stackmin())
add(value) {
instack.add(value) //min при этом обновляется
}
pop() {
if outstack пустой
перекинуть в него всё из instack c помощью add (которая обновляет min)
return outstack.pop()
}
Вот нашёл, где я это видел: Модификация стека и очереди для нахождения минимума за O (1)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Расскажите пожалуйста, что такое ошибки времени исполнения? Когда они возникают? Если можно, то хотелось бы посмотреть на примерах кода на C/C++И...
Ошибка PHP 500 , internal server error 500 Пре переходе на selectphp вылетает ошибка