利用一个Map<Integer, Integer> map存放数字val对应出现的次数,利用LinkedList<Integer>[] st 存储出现N次,对应的数字聚集,利用 int max 来记载当前出现的最大次数。
push一个 val 时,先更新val的出现次数times =map.getOrDefault(val, 0) + 1,再在对应次数的st[times].add(val),更新当前最大出现次数max = Math.max(max, times)。
pop 最大出现次数且末了一个入栈的元素时,只必要取出result = st[max].removeLast() 就是必要出栈的元素,再将该元素出现次数 -1即可。