查找数组中重复次数最多的数字
2014-08-12 12:53
381 查看
题目:
给定一个大小为n的数组,该数组包含数字的范围在 [0...k-1], k是一个正整数,k < = n。在这个数组找到重复次数最多的数字。
要求时间复杂度为n,空间复杂度为1,可以使用原数组。
原理:
遍历数组,让每个元素作为下标的元素加k,最后谁的值最大,则它对应的下标就是要求的值。
解法:
遍历数组,每个元素值作为下标的元素+=k;由于会改变数组后面的值,而我们还要根据数组本来的值作为下标呢,所以这里,数组原来的值=数组现在的值%k;最后比较哪个元素值最大,则它的下标就是要求的值。
注解:为何每次要加k?
原因1:数组的所有值都小于k,则出现次数最多的元素,以它为下标的元素加k的次数也最多,则其遍历一次后也就会最大。
原因2:由于每次都加的是k。则现在值=原来值+m个k;所以数组原来的值很好求:原来值=现在值%k。
下面给出C++代码:
#include<iostream>
#define LEN(array,len) {len=sizeof(array)/sizeof(array[0]);}
using namespace std;
int MaxRepeatingNum(int a[], int k)
{
int maxcount=0;
int length;
LEN(a,length);
int max=a[0];
for(int i=0;i<length;i++){
a[a[i]%k]+=k;
if(maxcount<a[a[i]%k]){
maxcount=a[a[i]%k];
max=a[i]%k;
}
}
return max;
}
int main()
{
int a[]={3,6,5,4,2,3,6,9,8,1,2,3};
cout<<MaxRepeatingNum(a,10)<<endl;
system("pause");
}
给定一个大小为n的数组,该数组包含数字的范围在 [0...k-1], k是一个正整数,k < = n。在这个数组找到重复次数最多的数字。
要求时间复杂度为n,空间复杂度为1,可以使用原数组。
原理:
遍历数组,让每个元素作为下标的元素加k,最后谁的值最大,则它对应的下标就是要求的值。
解法:
遍历数组,每个元素值作为下标的元素+=k;由于会改变数组后面的值,而我们还要根据数组本来的值作为下标呢,所以这里,数组原来的值=数组现在的值%k;最后比较哪个元素值最大,则它的下标就是要求的值。
注解:为何每次要加k?
原因1:数组的所有值都小于k,则出现次数最多的元素,以它为下标的元素加k的次数也最多,则其遍历一次后也就会最大。
原因2:由于每次都加的是k。则现在值=原来值+m个k;所以数组原来的值很好求:原来值=现在值%k。
下面给出C++代码:
#include<iostream>
#define LEN(array,len) {len=sizeof(array)/sizeof(array[0]);}
using namespace std;
int MaxRepeatingNum(int a[], int k)
{
int maxcount=0;
int length;
LEN(a,length);
int max=a[0];
for(int i=0;i<length;i++){
a[a[i]%k]+=k;
if(maxcount<a[a[i]%k]){
maxcount=a[a[i]%k];
max=a[i]%k;
}
}
return max;
}
int main()
{
int a[]={3,6,5,4,2,3,6,9,8,1,2,3};
cout<<MaxRepeatingNum(a,10)<<endl;
system("pause");
}
相关文章推荐
- c#面试题 查找整型数组中重复出现次数最多的数字,次数相同数字按从小到大排序
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- 【编程题】1000个(0-9)数字的数组中查找出现次数最多的3个数字,输出这3个数字和出现的次数。
- 数组中重复次数最多的数字
- java实现查找数组中重复次数最多的字符串
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 算法题目一:如果数组中数字重复最多的次数大于数组长度的一半,返回1,否则返回0
- C语言查找数组里数字重复次数的方法
- 查找一个数组中重复最多的项
- POJ 3693 重复次数最多的连续重复子串 后缀数组
- 问题8:如何找出数组中重复次数最多的数?
- 判断数组的长度,判断数组中重复的数字及其出现的次数
- 找出数组中重复次数最多的元素并打印
- 求一个数组中重复元素出现最多值,最大的元素及出现次数,次数相同时,取最大值,优先考虑次数
- 小程序(九)找出数组中出现最多的数字以及它的出现次数
- 如何查找一个字符串中重复次数最多的字符,返回这个字符的个数和字符
- 数字数组查找数组中超过出现次数超过一半的数字(找发帖水王)
- 找出数组中出现次数最多的数字
- POJ 3693 后缀数组 重复次数最多的连续重复子串 倍增法以及D3法
- 求一个数组中重复元素出现最多值,最大的元素及出现次数,次数相同时,取最大值,优先考虑次数