📌  相关文章
📜  标记数组 cpp 中元素的出现次数 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:55:38.191000             🧑  作者: Mango

标记数组 CPP 中元素的出现次数 - TypeScript

在 CPP 中,有时我们需要统计某个元素在数组中出现的次数。这时,可以使用标记数组来解决问题。本文将介绍如何使用 TypeScript 实现这一操作。

标记数组概述

标记数组,也称计数排序,是一种常用的数组操作方式,常用于统计元素出现次数。其实现方式为:

  1. 创建一个长度等于原数组元素最大值加一的数组;
  2. 将原数组中的每个元素作为标记数组的下标,在对应位置加一;
  3. 遍历标记数组,统计出现次数。
CPP 代码实现

使用 CPP 实现标记数组,代码如下:

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

const int maxn = 1000000;  // 数组长度上限
int a[maxn], b[maxn];  // 原数组和标记数组

int main() {
  int n;
  cin >> n;  // 输入数组长度
  int max_value = 0;  // 数组元素最大值
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    max_value = max(max_value, a[i]);
  }
  for (int i = 0; i <= max_value; i++) {
    b[i] = 0;  // 初始化标记数组
  }
  for (int i = 0; i < n; i++) {
    b[a[i]]++;  // 标记数组计数
  }
  for (int i = 0; i <= max_value; i++) {
    if (b[i] != 0) {
      cout << i << "出现了" << b[i] << "次" << endl;
    }
  }
  return 0;
}
TypeScript 代码实现

使用 TypeScript 实现标记数组,代码如下:

const countSort = (arr: number[]): void => {
  const max = Math.max(...arr);
  const bucket: number[] = Array(max + 1).fill(0);
  for (let i = 0; i < arr.length; i++) {
    bucket[arr[i]]++;
  }
  let k = 0;
  for (let i = 0; i < bucket.length; i++) {
    while (bucket[i] > 0) {
      arr[k++] = i;
      bucket[i]--;
    }
  }
};

const a: number[] = [1, 4, 2, 5, 2, 3];
countSort(a);
console.log(a);

在 TypeScript 中,我们可以使用泛型来支持不同类型的数组。以上代码中,泛型为 number[]

总结

本文介绍了标记数组的概念和 CPP、TypeScript 中的代码实现。标记数组是一种简单而有效的算法,常用于统计元素出现次数等数组操作中。在实际开发中,可以根据具体情况选择不同的实现方式。