首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

寻觅主元素

2013-10-07 
寻找主元素问题分析:所谓找主元素,就是在一个整数序列(数组)中,里面的某一个元素出现的次数超过元素总个数

寻找主元素

问题分析:所谓找主元素,就是在一个整数序列(数组)中,里面的某一个元素出现的次数超过元素总个数的一半,那么就陈这个元素为主元素。

性质1: 如果存在主元素的话,主元素一定是中位数

方法1:

使用快排O(nlogn)进行排序,找到中位数,然后判断首元素是否和中位数相等、以及尾元素是否和中位数相等。 如果有一个以上的相等,则存在主元素(中位数)。

方法2:

使用O(n)的选择算法找到中位数,然后再判断中位数是不是主元素。

方法3:

性质2:如果一个数组中有主元素,则同时删除两个不相等的值,这个序列中的主元素不会改变


其中比较好的解决方法是第三种,其实现可用递归,也可用迭代,下面代码分别给出其实现:

递归实现:

int main(){    int a[7] = {1,2,3,1,2,1,1};    majority_1(a,7);    majority_2(a,7);    return 0;}

结果都是输出:1

热点排行