Реализация минимальной кучи [закрыто] ⇐ JAVA
Реализация минимальной кучи [закрыто]
import java.util.*; Решение общественного класса { статический класс MinHeap { Список куча; MinHeap(размер int) { куча = новый ArrayList(размер); } INT ExtractMinElement() { если (куча.размер () == 0) { вернуть -1; } своп(0, куча.размер()-1, куча); int val = heap.remove(heap.size()-1); downheapify (0, куча); вернуть значение; } Private void swap(int i, int end, List heap) { int temp = heap.get(i); heap.set(я, heap.get(конец)); heap.set(конец, температура); } Private void downheapify(int pi, List heap) { интервал я = Пи; int lc=2*pi + 1; int rc=2*pi + 2; if(lcheap.get(i)) { я = ЖК; } if(rcheap.get(i)) { я = RC; } если(я!=пи) { своп (я, пи, куча); downheapify (я, куча); } } void deleteElement (int ind) { if(ind >=heap.size()){ возвращаться; } swap(ind, heap.size()-1,heap); куча.удалить(куча.размер()-1); upheapify (инд, куча); downheapify (инд, куча); } недействительная вставка (интервал val) { куча.add(val); upheapify(heap.size()-1, куча); } Private void upheapify(int pi, List heap) { если (пи == 0) { возвращаться; } интервал а = (пи-1)/2; if(heap.get(a) > heap.get(pi)) { своп (а, пи, куча); upheapify(а, куча); } } } } Пожалуйста, сообщите мне, если в моем коде что-то не так.
У меня третий тестовый пример не удался https://www.codingninjas.com/studio/pro ... ue=PROBLEM
Реализуйте класс «minHeap». Вам будут предоставлены следующие типы запросов:-
0 extractMinElement(): удалить минимальный элемент, присутствующий в куче, и вернуть его.
1 deleteElement(i): удалить элемент, присутствующий в индексе «i».
2 Insert(key): вставляет значение «ключ» в кучу.
Для запросов типов 0 и 1 хотя бы один элемент должен находиться в куче.
Тестовый пример Вход 34 2 45 0 2 47 2 47 0 0 0 0 2 17 2 2 0 2 7 2 18 0 2 40 2 18 0 2 41 0 2 18 2 30 0 2 34 0 2 5 2 30 0 2 17 0 2 4 0 0 2 21 2 2
Я получил результат
45 47 47 -1 2 7 18 40 41 30 5 17 4 34
Правильный вывод
45 47 47 -1 2 7 17 18 18 18 5 17 4 30
Я проверил свой код, вроде все в порядке
import java.util.*; Решение общественного класса { статический класс MinHeap { Список куча; MinHeap(размер int) { куча = новый ArrayList(размер); } INT ExtractMinElement() { если (куча.размер () == 0) { вернуть -1; } своп(0, куча.размер()-1, куча); int val = heap.remove(heap.size()-1); downheapify (0, куча); вернуть значение; } Private void swap(int i, int end, List heap) { int temp = heap.get(i); heap.set(я, heap.get(конец)); heap.set(конец, температура); } Private void downheapify(int pi, List heap) { интервал я = Пи; int lc=2*pi + 1; int rc=2*pi + 2; if(lcheap.get(i)) { я = ЖК; } if(rcheap.get(i)) { я = RC; } если(я!=пи) { своп (я, пи, куча); downheapify (я, куча); } } void deleteElement (int ind) { if(ind >=heap.size()){ возвращаться; } swap(ind, heap.size()-1,heap); куча.удалить(куча.размер()-1); upheapify (инд, куча); downheapify (инд, куча); } недействительная вставка (интервал val) { куча.add(val); upheapify(heap.size()-1, куча); } Private void upheapify(int pi, List heap) { если (пи == 0) { возвращаться; } интервал а = (пи-1)/2; if(heap.get(a) > heap.get(pi)) { своп (а, пи, куча); upheapify(а, куча); } } } } Пожалуйста, сообщите мне, если в моем коде что-то не так.
У меня третий тестовый пример не удался https://www.codingninjas.com/studio/pro ... ue=PROBLEM
Реализуйте класс «minHeap». Вам будут предоставлены следующие типы запросов:-
0 extractMinElement(): удалить минимальный элемент, присутствующий в куче, и вернуть его.
1 deleteElement(i): удалить элемент, присутствующий в индексе «i».
2 Insert(key): вставляет значение «ключ» в кучу.
Для запросов типов 0 и 1 хотя бы один элемент должен находиться в куче.
Тестовый пример Вход 34 2 45 0 2 47 2 47 0 0 0 0 2 17 2 2 0 2 7 2 18 0 2 40 2 18 0 2 41 0 2 18 2 30 0 2 34 0 2 5 2 30 0 2 17 0 2 4 0 0 2 21 2 2
Я получил результат
45 47 47 -1 2 7 18 40 41 30 5 17 4 34
Правильный вывод
45 47 47 -1 2 7 17 18 18 18 5 17 4 30
Я проверил свой код, вроде все в порядке
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение