数组中有一个数字出现的次数超过了数组长度的一半,找出这个数

来源:互联网 发布:投影机网络接口 编辑:程序博客网 时间:2024/04/29 07:43
     这个方法借用了别人的思路。
     在这里我做一下简单的分析。
     这个算法的时间复杂度是O(n),另外用了两个辅助变量。
     k用于临时存储数组中的数据,j用于存储某个数出现的次数。
     开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k
     因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数。

    下面这个算法只适合数组中数组中某个数的出现次数超过数组长度一半的数组,符合题意。

方法三
复制代码
int Search(int A[],int len) { if(NULL==A || len<=0) { return -1; } int k, j=0; for(int i=0;i<len;++i) { if(j==0) { k=A[i]; } if(k==A[i]) { ++j;//有人说++j比j++有先天的优势,不知你是否听说,如果你也听说,有没有想过More Effective C++(C++程序员必看书籍) }else { --j; } } return k; }
复制代码
};
原创粉丝点击