判断数组中是否有主元素
2014-05-10 16:02
148 查看
在网上看到的多益网络的一道笔试题目。大意如下:
对一个集合A = (1, 5, 6,
5, 5,5, 3,
5 ) 当其中一个数的个数大于或等于(忘记了是不是有等于)所有元素个数总和的一半,则称这个数字为这个集合的主元素。如5为A的主元素。假设在一个一维数组中存储了若干个数字,设计一个算法如果这个一维数组有主元素,则输出来,否则,返回
-1。(要考虑时间复杂度,空间复杂度)。
假设当其中一个数的个数大于或等于所有元素个数总和的一半,[b]则称这个数字为这个集合的主元素。(有等于)[/b]
这道题目类似找第k大的数。用快速排序来划分数组,第一次划分后,我们只划分中位数所在的那一段,之后一直这样做,直到找到中位数。因为主元素占了数组至少一半,找到中位数,主元素肯定已经按着了(如有有主元素的话)。之后再扫描一遍即可。
对一个集合A = (1, 5, 6,
5, 5,5, 3,
5 ) 当其中一个数的个数大于或等于(忘记了是不是有等于)所有元素个数总和的一半,则称这个数字为这个集合的主元素。如5为A的主元素。假设在一个一维数组中存储了若干个数字,设计一个算法如果这个一维数组有主元素,则输出来,否则,返回
-1。(要考虑时间复杂度,空间复杂度)。
假设当其中一个数的个数大于或等于所有元素个数总和的一半,[b]则称这个数字为这个集合的主元素。(有等于)[/b]
这道题目类似找第k大的数。用快速排序来划分数组,第一次划分后,我们只划分中位数所在的那一段,之后一直这样做,直到找到中位数。因为主元素占了数组至少一半,找到中位数,主元素肯定已经按着了(如有有主元素的话)。之后再扫描一遍即可。
#include <iostream> using namespace std; void exchange(int &a,int &b) { int tmp=a; a=b; b=tmp; } int Partition(int *A,int start,int end) { int tmp=A[end]; int i=start; for (int k=start;k<end;k++) { if(A[k]<=tmp) { exchange(A[k],A[i]); i++; } } exchange(A[i],A[end]); return i; } void findMain(int *A,int length) { int mid=(length+1)/2; int q=Partition(A,0,length-1); int s,e;//新的开始和结束点 if (mid<q) { s=0; e=q-1; } else { s=q+1; e=length-1; } while(mid!=q) { if (mid<q) { q=Partition(A,s,e); } else { q=Partition(A,s,e); } if(mid<q) { e=q-1; } else s=q+1; } } int main() { int A[]={1,5,6,5,5,5,3,5}; int length=sizeof(A)/sizeof(int); findMain(A,length); int MainMember; int maxleng=0; int tmp=1; for (int k=0;k<length;k++) { tmp=1; while(A[k]==A[k+1]&&k<length-2) { k++; tmp++; } if (tmp>maxleng) { maxleng=tmp; MainMember=A[k]; } } if (maxleng>=(length+1)/2) { cout<<MainMember<<endl; } else cout<<-1<<endl; return 0; }
相关文章推荐
- JS判断某个元素是否在数组中
- js判断一个元素是否在数组中
- javascript如何判断数组内元素是否重复的方法集锦
- (笔试题)如何判断数组中是否存在重复元素
- 判断数组是否包含某个元素的js函数实现方法
- 判断数组是否包含某个元素的js函数实现方法
- perl小技巧之 判断某元素是否在数组中(grep)
- 程序员面试题目总结--数组(五)【数组的后面m个数移动为前面m个数、列的前n项数据、判断整数x是否可以表示成n个连续正整数的和、数组中出现奇数次的元素、二维数组中的查找】
- iOS判断数组是否包含某个元素
- 判断一个数组是否存在三个元素为某一定值
- iOS判断数组是否包含某个元素
- 【C语言】判断两个数组中是否有相同的元素。
- python实现判断数组是否包含指定元素的方法
- JQuery判断数组中是否包含某个元素$.inArray("js", arr);
- JavaScript判断数组是否包含指定元素的方法
- c语言:判断两个数组是否有相同的元素
- jQuery判断数组是否包含了指定的元素
- (lodash_gcy)hasAttr——判断数组中是否存在某个元素
- JQuery判断数组中是否包含某个元素$.inArray("元素字符串", 数组名称);
- 在Java中如何高效的判断数组中是否包含某个元素