This assignment is for you to gain hands-on experiences of our weekly (week 9) covered topics including Queue, Heap, and Priority Queue. In this assignment, you need to write Java programs that meet the following requirements:
=== Basic Requirements (100 ‘pts) ===
1) (50 ‘pts) Implement a MyQueue class that supports the following interfaces within O(1) time:
1.1) int size(); //return the total number of stored elements
1.2) boolean isEmpty(); //return if the queue is empty
1.3) void offer(E val); //enqueue an element val for generic type E
1.4) E poll(); //remove head and return the removed value, return null if isEmpty()
1.5) E peek(); //return head, return null if isEmpty()
2) (50 ‘pts) Based on our class demonstration of MinHeap implementation, write a MaxHeap class that at least supports all the queue interfaces stated above as in 1).
=== Bonus (20 ‘pts) ===
a) (10 ‘pts) In the above requirement 2) MaxHeap, can you implement a class method: heapify(E[] arr) that takes in an array input, and transfer that array into a max heap?
b) (10 ‘pts) Inspired by the above practices, now revisite Leetcode 912. Sort An Array, this time use heap sort to conquer this coding challenge. Make sure your submission passes all Leetcode test cases.