1 / 1 / 0 Регистрация: 04.06.2015 Сообщений: 22 |
|
1 |
|
31.05.2016, 22:38. Показов 8905. Ответов 9
Доброго времени суток. Задание создать консольное приложение и «Найти максимальный элемент очереди или стека вставить после него «0»». Массив использовать нельзя, делать через промежуточный стек или очередь. Вопрос — как сравнить элементы очереди. не надо целиком рабочую программу, подскажите куда думать.
0 |
Администратор 15581 / 12553 / 4986 Регистрация: 17.03.2014 Сообщений: 25,485 Записей в блоге: 1 |
|
01.06.2016, 06:36 |
2 |
Dla12, используй тот факт что если выбрать очередной элемент из очереди (Dequeue) или стека (Pop) и поместить его в другую очередь или стек, ты получишь тот же порядок элементов. При этом ты переберешь все элементы и значит сможешь найти максимальное значение.
0 |
1 / 1 / 0 Регистрация: 04.06.2015 Сообщений: 22 |
|
01.06.2016, 13:11 [ТС] |
3 |
OwenGlendower, зто понятно, я так и пытался сделать, а вот как их сравнить?
0 |
OwenGlendower Администратор 15581 / 12553 / 4986 Регистрация: 17.03.2014 Сообщений: 25,485 Записей в блоге: 1 |
||||
01.06.2016, 13:31 |
4 |
|||
РешениеDla12, а как бы мы сравнивали элементы обычного массива? По очереди. Здесь тоже самое.
1 |
1 / 1 / 0 Регистрация: 04.06.2015 Сообщений: 22 |
|
01.06.2016, 14:21 [ТС] |
5 |
а как бы мы сравнивали элементы обычного массива? По очереди. Здесь тоже самое. Я строку заполняю с клавиатуры, в вашем вариант выдает ошибку: Наиболее подходящий перегруженный метод … имеет несколько недопустимых аргументов.
0 |
Администратор 15581 / 12553 / 4986 Регистрация: 17.03.2014 Сообщений: 25,485 Записей в блоге: 1 |
|
01.06.2016, 14:42 |
6 |
Dla12, добавь преобразование из строки в число используя int.Parse(string) или Convert.ToInt32(string).
1 |
Dla12 1 / 1 / 0 Регистрация: 04.06.2015 Сообщений: 22 |
||||
02.06.2016, 11:26 [ТС] |
7 |
|||
Как то так
1 |
OwenGlendower Администратор 15581 / 12553 / 4986 Регистрация: 17.03.2014 Сообщений: 25,485 Записей в блоге: 1 |
||||
02.06.2016, 11:33 |
8 |
|||
РешениеDla12, лучше так:
2 |
1 / 1 / 0 Регистрация: 04.06.2015 Сообщений: 22 |
|
03.06.2016, 19:41 [ТС] |
9 |
лучше так: Опыт страшная сила
0 |
0 / 0 / 0 Регистрация: 13.03.2017 Сообщений: 29 |
|
04.11.2017, 17:51 |
10 |
не подскажите пожалуйста, как минимальный элемент найти? а то, что-то не получается…
0 |
Asked
11 years, 6 months ago
Viewed
5k times
I am making application using c#. I have one queue as follows…
Queue QueueData = new Queue(60);
I want to find the min and max element from that queue. Any ideas?
Ryan Berger
9,6146 gold badges44 silver badges56 bronze badges
asked Nov 29, 2011 at 14:01
6
Of course, you must specify what value you want the max and min values of:
var max = QueueData.Max(x => x.SomeSelectedComparableValue);
var min = QueueData.Min(x => x.SomeSelectedComparableValue);
answered Nov 29, 2011 at 14:05
Roy DictusRoy Dictus
32.4k8 gold badges60 silver badges76 bronze badges
3
Добрый день. Помогите отыскать ошибку в коде. Нужно написать функцию-шаблон для поиска максимального элемента в очереди (элементы очереди отличаются типами данных). Написал функцию, но выкидывает не совсем понятные ошибки, касающиеся функции findMax(). Только начал осваивать эту тему, самостоятельно не получилось разобраться. Заранее спасибо за помощь.
#include <iostream>
#include <queue>
using namespace std;
template <typename T>
void fillArray(queue<T> &arr)
{
T el;
int size;
cout << "Enter the number of elements: ";
cin >> size;
for (int i = 0; i < size; i++)
{
cin >> el;
arr.push(el);
}
}
template <typename T>
T findMax(queue<T> arr)
{
T maxValue = arr[0];
for (int i = 1; i < arr.size(); i++)
{
if (arr[i] > maxValue)
{
maxValue = arr[i];
}
}
return maxValue;
}
int main()
{
queue<int> IntArr;
queue<double> doubleArr;
fillArray(IntArr);
fillArray(doubleArr);
cout << "Max in IntArr: " << findMax(IntArr) << endl;
cout << "Max in DoubleArr: " << findMax(doubleArr) << endl;
system("pause");
return 0;
}
Harry
214k15 золотых знаков117 серебряных знаков229 бронзовых знаков
задан 15 апр 2018 в 7:37
4
У очереди НЕТ возможности обращения к элементам наподобие arr[i]
.
Так что, по большому счету, найти максимальный элемент в очереди можно только вынимая элемент в начале очереди, сравнивая и ставя его снова в конец очереди…
Ну, или, раз уж вы передаете очередь не по ссылке, а по значению:
T findMax(queue<T> arr)
то все равно это копия, так что можно просто выбрать из очереди все элементы для поиска максимального, не возвращая их в очередь.
ответ дан 15 апр 2018 в 7:43
HarryHarry
214k15 золотых знаков117 серебряных знаков229 бронзовых знаков
Формулировка задачи:
Доброго времени суток. Задание создать консольное приложение и «Найти максимальный элемент очереди или стека вставить после него «0»». Массив использовать нельзя, делать через промежуточный стек или очередь. Вопрос — как сравнить элементы очереди. не надо целиком рабочую программу, подскажите куда думать.
Код к задаче: «Найти максимальный элемент Очереди (Queue) и вставить после него «0»»
textual
static void Main(string[] args) { Console.WriteLine("Введите количество элементов"); int n = Convert.ToInt32(Console.ReadLine()); Queue<int> q = new Queue<int>(n); for (int i = 0; i < n; i++) { Console.WriteLine("Введите элемент № " + i); int elm = Convert.ToInt32(Console.ReadLine()); q.Enqueue(elm); } Queue<int> q1 = new Queue<int>(); int max = int.MinValue; while (q.Count > 0) { int elm = q.Dequeue(); if (elm > max) max = elm; q1.Enqueue(elm); } while (q1.Count > 0) { int elm = q1.Dequeue(); q.Enqueue(elm); if (elm == max) q.Enqueue(0); } while (q.Count > 0) Console.Write("{0} ", q.Dequeue()); }
Полезно ли:
13 голосов , оценка 4.308 из 5
#java #algorithm #data-structures #queue
Вопрос:
Дан массив A и целое число K. Мы должны найти максимальный элемент во всех смежных подмножествах размера K, используя только очередь в JAVA.
Например:
Input:
7 3
12 1 78 90 57 89 56
Output:
78 90 90 90 89
Как я могу решить эту проблему, используя только очередь на Java?
Комментарии:
1. дан массив и целое число, …, решите его, используя только очередь . Какая очередь? Что ты пробовал, где ты застрял? Пожалуйста, выберите один язык
2. Я могу решить эту проблему с помощью deque…Но я пытаюсь решить ее только с помощью очередей.
3. Вам понадобится функция, которая возвращает максимальный элемент в данной очереди. Затем вы создаете очередь и заполняете ее первыми K элементами вашего списка. После печати макса (с помощью первоначально упомянутой функции) вы отбрасываете первый элемент и добавляете новый. Повторяйте до тех пор, пока у вас не останется новых элементов.
Ответ №1:
Вы можете использовать Sliding Window
технику, чтобы найти максимальный элемент во всех смежных подмассивах размера K
.
Для этого нам нужно использовать a PriorityQueue
, чтобы мы могли получить максимальный элемент определенного окна в постоянное время. Во-первых, добавьте все первые K
элементы в очередь и верните первый максимум, затем выполните итерацию по остальным окнам/суб-массивам размера K
, просто добавив новую головку и удалив хвост окна.
И на каждой итерации продолжайте возвращать peek
(максимум) текущего окна.
Вот реализация:
PriorityQueue<Integer> queue =
new PriorityQueue<>(Collections.reverseOrder());
for (int i=0; i < K; i )
queue.add(arr[i]);
System.out.println(queue.peek()); // maximum element among first `K` elements
// Rest of the windows of size `K`
for (int i=K; i < N; i )
{
queue.remove(arr[i - K]); // first element from front
queue.add(arr[i]); // adding current element
System.out.println(queue.peek()); // maximum element in current window
}
Комментарии:
1. Требуется ли для этого, чтобы целые числа были уникальными?
2. @Surt Нет, он также отлично будет работать с массивом с дубликатами.
3.
PriorityQueue.remove(Object o)
то есть занимает линейное (по размеру очереди) времяO(K)
. Это не лучше, чем сканировать окно в поисках элемента max.4. @user58697 Да, это
O(N*K)
так, но, пожалуйста, прочитайте вопрос еще раз. ОП строго упомянул, что ему нужен подход, использующий только очередь . Насколько мне известно, это лучшая временная сложность, которую мы можем достичь, если используем очередь. O(N) возможно, если мы используем adeque
, которое он уже знает. Если у вас есть более эффективный подход с использованием очереди, пожалуйста, поделитесь своей идеей.