📅  最后修改于: 2023-12-03 15:41:39.392000             🧑  作者: Mango
在程序开发中,我们经常需要对数组中每个元素出现的次数进行统计。这就是计算数组元素的频率。本文将介绍如何实现这个功能。
最常规的做法是使用一个哈希表来存储每个元素出现的次数。具体操作如下:
这种做法的时间复杂度为 O(n),但需要额外的空间来存储哈希表。
def count_freq(arr):
freq = {}
for elem in arr:
if elem in freq:
freq[elem] += 1
else:
freq[elem] = 1
return freq
arr = [1, 2, 3, 2, 3, 3]
freq = count_freq(arr)
for elem in freq:
print(elem, freq[elem])
public static void countFreq(int[] arr) {
Map<Integer, Integer> freq = new HashMap<>();
for (int elem : arr) {
if (freq.containsKey(elem)) {
freq.put(elem, freq.get(elem) + 1);
} else {
freq.put(elem, 1);
}
}
for (Map.Entry<Integer, Integer> entry : freq.entrySet()) {
int elem = entry.getKey();
int count = entry.getValue();
System.out.println(elem + " " + count);
}
}
int[] arr = {1, 2, 3, 2, 3, 3};
countFreq(arr);
还有一种做法是将数组排序,然后遍历数组,统计每个元素出现的次数。具体操作如下:
这种做法可以避免使用额外的空间,但时间复杂度取决于排序算法的复杂度。
def count_freq(arr):
arr.sort()
count = 1
prev = arr[0]
for i in range(1, len(arr)):
if arr[i] == prev:
count += 1
else:
print(prev, count)
count = 1
prev = arr[i]
print(prev, count)
arr = [1, 2, 3, 2, 3, 3]
count_freq(arr)
public static void countFreq(int[] arr) {
Arrays.sort(arr);
int count = 1;
int prev = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] == prev) {
count++;
} else {
System.out.println(prev + " " + count);
count = 1;
prev = arr[i];
}
}
System.out.println(prev + " " + count);
}
int[] arr = {1, 2, 3, 2, 3, 3};
countFreq(arr);
计算数组元素的频率是一个常见的需求,我们可以使用哈希表或排序来实现。哈希表方法的代码短小精悍,但需要额外的空间。排序方法可以避免使用额外的空间,但时间复杂度可能会比较高。根据具体的需求来选择合适的方法。