“多个数值比较”的算法
现有一组数据(假设都是整数吧),总量不确定(当然数量不会太大的,比如最多200个)。
要求:
找出这组数里面的值相等的、个数最多的那个。
要求得到值是多少?有几个相等(如果没有相等的,个数就是0)?
举例:
数据:1,2,3,4,5,6,7,8,9
结论是“0个相等。”
数据:1,5,3,7,7,3,5,4,5,6
结论是“3个相等,值为5”
假设把第二组数的其中一个5换成9,则:“2个相等,值为5(或3、或7,都可)”
把数据排序后来找的算法,就不必说了。
我想看看哪个大神有没有直接查找找、效率更高的巧妙算法。
代码语言限制为C/C++,或者VB。
用基础语句来写,别用什么库里的“高级功能”。
算法
[解决办法]
数的范围大的话其实也可以用 C++ 库里的 std::map, 但是你又要求不使用这些库.
[解决办法]
数的范围不大,自己建个数据遍历一遍计数就行了。map是个好方法。
[解决办法]
//有一个数组,存储的元素为1到10000000的任意数,在其中查找出一个重复的数字
#include <stdio.h>
int a[3]={1,10000000,10000000};
static unsigned char b[10000000/8+1];
int i;
void main() {
for (i=0;i<3;i++) {
if (b[a[i]/8]&(1<<(a[i]%8))) break;
else b[a[i]/8]
[解决办法]
=(1<<(a[i]%8));
}
if (i<3) printf("%d\n",a[i]);
else printf("Can not find.\n");
}