给定一个有键值的hm,值=重复次数。
我们按最高频率到最低频率排序。如果两个元素有相同的频率,我们按增加值排序。
现在我想把这个hm,按照数字频率(相同的数字重复了多少次)对它进行排序,然后把它放到一个新的数组中。下面是我构建的函数(但不起作用),如何修复它,甚至提高效率?
public static void findMostFrequent(int[] ar,HashMap<Integer, Integer> t) {
int frequency=ar[0],k=0;
for(int i: t.keySet()) {
for(int j: t.keySet()) { //string(word):all the values together
if(t.get(j)> frequency) {
frequency=t.get(j);
for(int l=k;l<t.get(j);l++ ) {
ar[k]=frequency;
k++;
}
t.remove(frequency);
}
}
}
}
示例:给定hm(hashmap)- {2=1, 3=3, 5=2, 7=2, 9=1}
我希望新数组(称为ar)为: (3,3,3,5,5,7,7,2,9)
基本上,从最频繁的数字到最不频繁的单词,所以如果3被重复了3次并且是重复次数最多的数字,那么在新的数组中(3,3,3)等等。。。我们将不胜感激
2条答案
按热度按时间ygya80vv1#
我想到的一个解决方案是首先按如下值对hashmap排序:
然后迭代新的linkedhashmap以生成结果数组。
qc6wkl3g2#
使用treemap<integer,integer>
将频率设为键,这样treemap保持排序顺序。
遍历键集并收集值。
如果您没有使用treemap的选项。可以在方法中将其转换为treemap。
举个例子: