找出一个数组中出现次数超过一半的元素
2014-04-02 17:37
417 查看
遍历数组,并且保存两个值:一个是数组中的一个数字,一个是次数。当遍历下一个数字时,如果下一个数字和当前保存的数字相同,则次数加1;如果不同则次数减1。如果次数为0,则需要保存下一个数字,并把次数设为1。由于要找的数字出现的次数比其他所有数字出现的次数之和还要多,所以要找的数字肯定是最后一次把次数设为1的那个数字。
代码如下:
#include<iostream>
using namespace std;
int lookup(int a[],int length)
{
int result=a[0];
int times=1;
for(int i=1;i<length;i++)
{
if(times==0)
{
result=a[i];
times=1;
}
else if(result==a[i])
times++;
else
times--;
}
return result;
}
int main()
{
int a[]={1,2,1,3,4,5,1,1,1,1,2,4};
int k=lookup(a,12);
cout<<k<<endl;
return 0;
}
代码如下:
#include<iostream>
using namespace std;
int lookup(int a[],int length)
{
int result=a[0];
int times=1;
for(int i=1;i<length;i++)
{
if(times==0)
{
result=a[i];
times=1;
}
else if(result==a[i])
times++;
else
times--;
}
return result;
}
int main()
{
int a[]={1,2,1,3,4,5,1,1,1,1,2,4};
int k=lookup(a,12);
cout<<k<<endl;
return 0;
}
相关文章推荐
- 在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中至多有一个出现次数大于数组长度一半元素,找出这个元素
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数。java实现
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 找出数组中的一个元素出现次数大于数组长度的一半的元素,若不存在返回0
- 消除原理____假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(qosrt 快速排序 哈希)
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(消除 qosrt 快速排序 哈希)
- 找出数组中出现次数超过数组长度一半的元素
- C++数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 大小为N的数组A,其主要元素是一个出现次数超过N/2的元素。找出主要元素。
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。
- 找出出现次数超过数组一半元素的数
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数