📌  相关文章
📜  计算数组元素的频率(1)

📅  最后修改于: 2023-12-03 15:41:39.392000             🧑  作者: Mango

计算数组元素的频率

在程序开发中,我们经常需要对数组中每个元素出现的次数进行统计。这就是计算数组元素的频率。本文将介绍如何实现这个功能。

常规做法

最常规的做法是使用一个哈希表来存储每个元素出现的次数。具体操作如下:

  1. 遍历数组,将每个元素作为键,统计出现次数作为值,存入哈希表中。
  2. 统计完成后,遍历哈希表,输出每个元素及其出现次数。

这种做法的时间复杂度为 O(n),但需要额外的空间来存储哈希表。

Python代码
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])
Java代码
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);
排序做法

还有一种做法是将数组排序,然后遍历数组,统计每个元素出现的次数。具体操作如下:

  1. 对数组进行排序。
  2. 从左到右遍历排序后的数组,用一个计数器记录当前元素的出现次数。
  3. 当发现元素不同的时候,输出前一个元素及其出现次数,然后将计数器复位。

这种做法可以避免使用额外的空间,但时间复杂度取决于排序算法的复杂度。

Python代码
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)
Java代码
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);
总结

计算数组元素的频率是一个常见的需求,我们可以使用哈希表或排序来实现。哈希表方法的代码短小精悍,但需要额外的空间。排序方法可以避免使用额外的空间,但时间复杂度可能会比较高。根据具体的需求来选择合适的方法。