import java.util.*;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.math.*;
import java.io.File;
import java.io.FileInputStream;
import java.lang.*;
class Node{
int val;
int freq;
Node(int val, int freq){
this.val = val;
this.freq = freq;
}
}
class Solution{
public static int[] itemSort(int[] items) {
Map
<Integer, Integer
> itemMap
= new HashMap
<>(); for(int item : items)
itemMap.put(item, itemMap.getOrDefault(item, 0)+1);
PriorityQueue<Node> pq = new PriorityQueue<>(new Comparator<Node>() {
public int compare(Node n1, Node n2) {
int cmp = n1.freq - n2.freq;
if(cmp != 0)
return cmp;
return n1.val - n2.val;
}
});
for(Map.
Entry<Integer, Integer
> m
: itemMap.
entrySet()) { pq.offer(new Node(m.getKey(), m.getValue()));
}
int n = items.length;
int[] res = new int[n];
int index = 0;
while(!pq.isEmpty()) {
Node node = pq.poll();
int f = node.freq;
while(f > 0) {
res[index++] = node.val;
f--;
}
}
return res;
}
// Driver code
int[] items = {3,1,2,2,4};
int[] items2 = {8,5,5,5,5,1,1,1,4,4};
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQmxvY2tpbmdRdWV1ZTsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWU7CmltcG9ydCBqYXZhLm1hdGguKjsKaW1wb3J0IGphdmEuaW8uRmlsZTsKaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwppbXBvcnQgamF2YS5sYW5nLio7CmNsYXNzIE5vZGV7CglpbnQgdmFsOwoJaW50IGZyZXE7CglOb2RlKGludCB2YWwsIGludCBmcmVxKXsKCQl0aGlzLnZhbCA9IHZhbDsKCQl0aGlzLmZyZXEgPSBmcmVxOwoJfQp9CiBjbGFzcyBTb2x1dGlvbnsKCXB1YmxpYyBzdGF0aWMgaW50W10gaXRlbVNvcnQoaW50W10gaXRlbXMpIHsKCQlNYXA8SW50ZWdlciwgSW50ZWdlcj4gaXRlbU1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKCQlmb3IoaW50IGl0ZW0gOiBpdGVtcykKCQkJaXRlbU1hcC5wdXQoaXRlbSwgaXRlbU1hcC5nZXRPckRlZmF1bHQoaXRlbSwgMCkrMSk7CgkJCgkJUHJpb3JpdHlRdWV1ZTxOb2RlPiBwcSA9IG5ldyBQcmlvcml0eVF1ZXVlPD4obmV3IENvbXBhcmF0b3I8Tm9kZT4oKSB7CgkJCXB1YmxpYyBpbnQgY29tcGFyZShOb2RlIG4xLCBOb2RlIG4yKSB7CgkJCQlpbnQgY21wID0gbjEuZnJlcSAtIG4yLmZyZXE7CgkJCQlpZihjbXAgIT0gMCkKCQkJCQlyZXR1cm4gY21wOwoJCQkJcmV0dXJuIG4xLnZhbCAtIG4yLnZhbDsKCQkJfQoJCX0pOwoJCQoJCWZvcihNYXAuRW50cnk8SW50ZWdlciwgSW50ZWdlcj4gbSA6IGl0ZW1NYXAuZW50cnlTZXQoKSkgewoJCQlwcS5vZmZlcihuZXcgTm9kZShtLmdldEtleSgpLCBtLmdldFZhbHVlKCkpKTsKCQl9CgkJCgkJaW50IG4gPSBpdGVtcy5sZW5ndGg7CgkJaW50W10gcmVzID0gbmV3IGludFtuXTsKCQlpbnQgaW5kZXggPSAwOwoJCXdoaWxlKCFwcS5pc0VtcHR5KCkpIHsKCQkJTm9kZSBub2RlID0gcHEucG9sbCgpOwoJCQlpbnQgZiA9IG5vZGUuZnJlcTsKCQkJd2hpbGUoZiA+IDApIHsKCQkJCXJlc1tpbmRleCsrXSA9IG5vZGUudmFsOwoJCQkJZi0tOwoJCQl9CgkJfQoJCQoJCXJldHVybiByZXM7Cgl9CgkvLyBEcml2ZXIgY29kZQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKCQlpbnRbXSBpdGVtcyA9IHszLDEsMiwyLDR9OwoJCVN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcoaXRlbXMpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGl0ZW1Tb3J0KGl0ZW1zKSkpOwoJCQoJCQoJCWludFtdIGl0ZW1zMiA9IHs4LDUsNSw1LDUsMSwxLDEsNCw0fTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGl0ZW1zMikpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcoaXRlbVNvcnQoaXRlbXMyKSkpOwoJCQoJfQp9
[3, 1, 2, 2, 4]
[1, 3, 4, 2, 2]
[8, 5, 5, 5, 5, 1, 1, 1, 4, 4]
[8, 4, 4, 1, 1, 1, 5, 5, 5, 5]