给定n个整数,统计每个整数出现的次数,并按出现次数由大到小排列
时间: 2023-05-22 08:05:01 浏览: 103
你好,这个问题可以通过使用哈希表(HashMap)来解决。遍历整个整数数组,将每个整数作为一个键(key)存储在哈希表中并将其出现次数(value)增加1。最后,按照值的大小进行排序,并输出键值对。以下是一个示例代码:
```python
def countIntegers(integers):
hashMap = {}
for integer in integers:
if integer in hashMap:
hashMap[integer] += 1
else:
hashMap[integer] = 1
sortedHashMap = sorted(hashMap.items(), key=lambda x: x[1], reverse=True)
for item in sortedHashMap:
print(item[0], ':', item[1])
# 示例输入和输出
countIntegers([1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 1])
# 1 : 4
# 2 : 3
# 3 : 2
# 4 : 2
# 5 : 1
```
希望这能够帮到你,有什么其它问题可以随时问我!
相关问题
给定N个整数,统计每个整数出现次数,按出现次数从多到少排列C语言
在C语言中,你可以使用哈希表(如数组或结构体结合下标)来统计每个整数出现的次数,然后利用优先队列(堆)或快速选择等算法对结果进行排序。这里是一个简单的步骤描述:
1. **初始化**:创建一个大小为`N+1`的整型数组`count`,用于存储每个整数出现的次数,因为索引从0开始,所以最大值可以是`N`。
```c
int count[N + 1] = {0};
```
2. **遍历输入**:遍历给定的整数数组`arr[]`,对于每一个元素`num`,递增`count[num]`。
```c
for (int i = 0; i < N; i++) {
count[arr[i]]++;
}
```
3. **统计并排序**:遍历`count[]`数组,将元素作为键值对存入另一个数组或结构体,同时保存其对应的计数值。为了保持出现次数由高到低的顺序,可以使用一个优先队列(最小堆),每次插入新元素时检查是否需要调整堆的结构。
```c
typedef struct {
int num;
int freq;
} Pair;
Pair heap[50]; // 简单起见,假设最多有50个不同元素
int size = 0;
void insert(Pair pair) {
// 插入操作...
}
void sort() {
for (size_t i = 0; i <= N; i++) {
if (count[i]) {
Pair p = {i, count[i]};
insert(p);
}
}
while (!heap[size].freq) size--;
// 根据需要调整堆并删除最小频次的元素
}
```
4. **输出结果**:最后,从堆中取出元素并按照频率排序打印出来。
```c
void print_sorted_counts() {
for (int i = size - 1; i >= 0; i--) {
printf("%d occurs %d times\n", heap[i].num, heap[i].freq);
}
}
```
C语言给定n个整数,统计出每个整数出现的次数,按照出现次数从多到少的顺序输出
可以使用哈希表来统计每个整数出现的次数,然后对哈希表中的元素按照出现次数从多到少进行排序输出。
具体操作步骤如下:
1. 定义一个结构体,包含整数值和出现次数两个属性。
2. 读入n个整数,使用哈希表统计每个整数出现的次数,将每个整数的值和出现次数存储到结构体数组中。
3. 对结构体数组进行排序,按照出现次数从多到少的顺序排列。
4. 遍历排序后的结构体数组,按照要求输出每个整数以及它出现的次数。
下面是一份示例代码:
```
#include <stdio.h>
#include <stdlib.h>
// 定义结构体,包含整数值和出现次数两个属性
struct Node {
int value;
int count;
};
// 哈希表的大小
const int HASH_SIZE = 10007;
// 哈希表,用于统计每个整数出现的次数
struct HashTable {
Node data[HASH_SIZE];
int size;
void init() {
size = 0;
for (int i = 0; i < HASH_SIZE; i++) {
data[i].value = 0;
data[i].count = 0;
}
}
int find(int x) {
int k = (x % HASH_SIZE + HASH_SIZE) % HASH_SIZE;
while (data[k].count && data[k].value != x) {
k = (k + 1) % HASH_SIZE;
}
return k;
}
void insert(int x) {
int k = find(x);
if (data[k].count == 0) {
data[k].value = x;
data[k].count = 1;
size++;
} else {
data[k].count++;
}
}
};
// 比较函数,用于排序
int cmp(const void* a, const void* b) {
Node* p = (Node*)a;
Node* q = (Node*)b;
if (p->count != q->count) {
return q->count - p->count;
} else {
return p->value - q->value;
}
}
int main() {
int n;
scanf("%d", &n);
// 初始化哈希表
HashTable ht;
ht.init();
// 读入n个整数,统计每个整数出现的次数
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
ht.insert(x);
}
// 将哈希表中的元素存储到结构体数组中
Node a[ht.size];
int k = 0;
for (int i = 0; i < HASH_SIZE; i++) {
if (ht.data[i].count > 0) {
a[k++] = ht.data[i];
}
}
// 对结构体数组进行排序
qsort(a, ht.size, sizeof(Node), cmp);
// 输出结果
for (int i = 0; i < ht.size; i++) {
printf("%d %d\n", a[i].value, a[i].count);
}
return 0;
}
```
阅读全文