Java 查找整数数组中一个整数的出现次数,并按顺序打印
有一个int数组:Java 查找整数数组中一个整数的出现次数,并按顺序打印,java,arrays,sorting,Java,Arrays,Sorting,有一个int数组: int[] arr = new int[] {8, 9, 7, 6, 7, 8, 8, 9}; 如何计算每个数字的出现次数,然后对其进行排序,使数字及其出现次数的打印按升序显示?像这样: 6(1) 7(2) 8(3) 9(2) 不使用任何库,只使用循环和ifs,最有效的方法是什么?查找引用:尝试创建第二个数组,使用待排序数组中的数字作为此新数组的索引,并将该索引处的值更新1。这将在O(n)时间内存储待排序数组的出现次数,前提是不必调整数组的大小。如果您可以使用库,我建议您
int[] arr = new int[] {8, 9, 7, 6, 7, 8, 8, 9};
如何计算每个数字的出现次数,然后对其进行排序,使数字及其出现次数的打印按升序显示?像这样:
6(1) 7(2) 8(3) 9(2)
不使用任何库,只使用循环和ifs,最有效的方法是什么?查找引用:尝试创建第二个数组,使用待排序数组中的数字作为此新数组的索引,并将该索引处的值更新1。这将在O(n)时间内存储待排序数组的出现次数,前提是不必调整数组的大小。如果您可以使用库,我建议您使用hashmap
int[] arr = new int[] {8, 9, 7, 6, 7, 8, 8, 9};
Map<Integer, Integer> map = new TreeMap<>(); // TreeMap sorts keys in their natural order
for(int i : arr) {
if(!map.containsKey(i)) { // if map doesn't contain currently checked int as a key...
map.put(i, 1); // put it to map with corresponding value equal to one
} else { // it this int is already in map...
map.put(i, map.get(i) + 1); // put it into map with incremented value
}
}
System.out.println(map.entrySet());
排序:希望这不是“自己查找”类型的答案,但看看是否可以搜索排序算法。它们有很多,从冒泡排序(易于编码但速度较慢)到快速排序(难以编码但速度较快)。应该有大量的java教程,用于简单的在线排序算法,它们完全符合您的要求。使用
TreeMap
,其中键将是数组中的int并计算其出现次数。要求家庭作业帮助的问题必须包括您迄今为止为解决问题所做工作的摘要,以及解决该问题所遇到的困难的描述(,)。只需迭代该数组并设置一个映射
,将值与它们的出现关联起来。每次再次看到值时更新计数器。HashMap
可快速访问包含的问题。TreeSet
使排序变得微不足道。对于像这样的小数组,性能是不相关的,您可以使用稍微慢一点的contains
方法使用TreeSet
。@Zabuza,我认为这是一个家庭作业-它明确禁止任何库。另一方面,根本没有尝试…这似乎是一个很好的groupingBy
-->排序的-->toMap
。我认为使用Map
与OPs规范“仅循环和ifs”相矛盾,但规范目前还不是很清楚。我认为OP不希望这样。。。他在没有使用(他/她称之为)库的情况下明确要求得到答案,Map
是一种“库”,我认为java.util可能是一个可以接受的选择,好吧,我会尝试改进它,但是。。。也许让我们等待OP的一些解释,因为现在还不太清楚。你的计数方法是一种称为CountingSort的形式,只有在已知值有一个很小的上限(从一个小宇宙中提取)的情况下才能很好地工作。它也可以进行简单的排序,不需要另一种排序方法。只需迭代数组,并使用count0
省去所有内容,排序很简单。所以你的O(n)
实际上指的是宇宙的大小,而不是输入的大小(没有限制,输入是整数的整个范围)。
[6=1, 7=2, 8=3, 9=2]