C语言 -- 计算一个数组中每个元素出现的频率
来源:互联网 发布:c盘优化驱动器第11遍 编辑:程序博客网 时间:2024/03/29 07:37
1. 问题描述:
假设有个整型数组inputArray,共有N个元素。我们要统计每个元素出现的频率。
2. 分析:
这个问题的难点在于保存每个元素的当前频率值。
比如元素1,当前出现1次了,怎么保存这个状态,解决了这个问题后,再遇到1就更新这个状态就好了,其它元素也是一样的道理。
如果用Java来解决这个问题会很简单,因为Java丰富的容器类为我们提供了上面问题的解决方案,HashMap。我们只须以这个元素为key,其出现频率为value,
后续更新它的value就可以了,而且效率还不错。
但是如果要用C语言来实现的话,一切都须得我们自己来手动解决了,这也是这篇博客的目的。
C语言解决思路:
- 首先我们声明一个大小和inputArray一样的数组countryArray,并将每个元素值初始化为-1,用来存储每个元素的频率。这需要一些技巧来达到和HashMap一样的效果却也不损失太多性能。
- if countArray[i] == -1,表示我们还没有统计inputArray[i]这个元素的频率; if countArray[i] == 0,表示我们已经统计过元素inputArray[i]的频率了。
- 用循环遍历InputArray,from 0 到 N-1,统计每个元素的频率。
- 对于当前元素inputArray[i],if countArray[i] == -1,我们就保存这个元素的频率到countArray[i];否则,不保存,因为之前已经统计过它了。
/* * C Program to count frequency of each Array element */ #include <stdio.h> int main() { int inputArray[100], countArray[100]; int elementCount, i, j, count; printf("Enter Number of Elements in Array\n"); scanf("%d", &elementCount); printf("Enter %d numbers\n", elementCount); /* Read array elements */ for(i = 0; i < elementCount; i++){ scanf("%d", &inputArray[i]); countArray[i] = -1; } /* * for any element inputArray[i], If countArray[i] = -1, * that means frequency is not counted for this number yet * and countArray[i] = 0 means frequency is already * counted for this number. */ for(i = 0; i < elementCount; i++) { count = 1; for(j = i+1; j < elementCount; j++) { if(inputArray[i]==inputArray[j]) { countArray[j] = 0; count++; } } if(countArray[i]!=0) { countArray[i] = count; } } /* Print count of each element */ for(i = 0; i<elementCount; i++) { if(countArray[i] != 0) { printf("Element %d : Count %d\n", inputArray[i], countArray[i]); } } return 0; }
0 0
- C语言 -- 计算一个数组中每个元素出现的频率
- 在一个数组或字符串中找到出现频率最高的那个元素的方法
- matlab统计一个数组中各元素出现的频数、频率
- 计算单词出现的频率C语言实现的
- 计算单词出现的频率C语言实现的
- 通过一个数组找到每个元素对应出现的次数
- 计算数组中元素出现的百分比
- 【C语言】计算输入整数中每个数字出现的次数
- 统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率
- 计算数组中每个数字出现的次数
- C语言中计算一个数组长度
- 计算一个字符串中每个字符出现的次数
- 用c语言编程 统计输入的一个字符串中每个字母出现的次数
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- C语言计算一个数每个位的数值
- 数组中每个元素都出现了两次,但是其中一个元素只出现了一次,求出此元素
- go语言之map练习(二):编写一个程序wordfreq程序,统计输入文本中每个单词出现的频率(次数)
- 一个整型数组中,每个元素两两出现,其中一个元素只出现一次,请找出来
- OkHttp的二次封装
- spring整合jedis
- dubbo相关知识
- linux下rwx权限数字解释
- dubbo
- C语言 -- 计算一个数组中每个元素出现的频率
- Windows证书查看
- Leetcode-102. Binary Tree Level Order Traversal
- android Splash简单炫酷UI界面
- Android Uri外部启动app或者notification启动
- 微信小程序 尺寸单位rpx与px,rem相互转换
- Spring源码分析【8】-分布式环境SpringSecurity保持用户会话
- JSP基础(2)
- 喜