Difference between SOAP and REST
www.xfront.com/REST.ppt
notes; projects; seminars
//using Java's priorityQueue
public List<Integer> getTopKFrequent(int[] nums, int k) {
List<Integer> result = new ArrayList<>();
List<Integer> distinctList = new ArrayList<>(); //distinct numbers
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); //number, frequency
for(int num: nums){
if(map.containsKey(num)){
map.put(num, map.get(num)+1);
}else{
map.put(num, 1);
distinctList.add(num);
}
}
//PriorityQuueue with custom comparator, with the head of queue being the element with highest frequency.
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a,b) -> (map.get(b)-map.get(a)));//offer first k from distinct number list
for(int i =0; i<distinctList.size(); i++){
maxHeap.offer(distinctList.get(i));
}
for(int i=0; i<k; i++){
result.add(maxHeap.poll());
}
return result;
}
|
//using Java's priorityQueue -minHeap
public List<Integer> getTopKFrequent(int[] nums, int k) {
List<Integer> result = new ArrayList<>();
List<Integer> distinctList = new ArrayList<>(); //distinct numbers
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); //number, frequency
for(int num: nums){
if(map.containsKey(num)){
map.put(num, map.get(num)+1);
}else{
map.put(num, 1);
distinctList.add(num);
}
}
//PriorityQuueue with custom comparator, with the head of queue being the element with lowest frequency.
PriorityQueue<Integer> minHeap = new PriorityQueue<>((a, b) -> (map.get(a)-map.get(b)));//offer first k from distinct number list
int index = 0;
for(int i =0; i<k; i++){
minHeap.offer(distinctList.get(i));
index++;
}
while(index < distinctList.size()){
if(map.get(minHeap.peek())< map.get(distinctList.get(index))){
minHeap.poll();
minHeap.offer(distinctList.get(index));
}
index ++;
}
//add to the result in reverse order
for(int i=0; i<k; i++){
result.add(0, minHeap.poll());
}
return result;
}
|
//using Guava's minMaxPriorityQueue
public List<Integer> getTopKFrequent(int[] nums, int k) {
List<Integer> result = new ArrayList<>();
List<Integer> temp = new ArrayList<>(); //distinct numbers
HashMap<Integer, Integer> map = new HashMap<>(); //number, frequency
for(int num: nums){
if(map.containsKey(num)){
map.put(num, map.get(num)+1);
}else{
map.put(num, 1);
temp.add(num);
}
}
//Guava's MinMaxPriorityQueue
MinMaxPriorityQueue<Integer> maxHeap = MinMaxPriorityQueue.orderedBy(new Comparator<Integer>(){
public int compare(Integer a, Integer b){
return Integer.compare(map.get(b), map.get(a));
}
}).maximumSize(k).create();
//offer all elements, MinMaxPriorityQueue will envict based on comparators
for(int i =0; i<temp.size(); i++){
maxHeap.add(temp.get(i));
}
//add to the result
for(int i=0; i<k; i++){
result.add(maxHeap.poll());
}
return result;
}
|