面试题-查找一个数组是否存在数目大于一半的数

来源:互联网 发布:思科交换机端口聚合 编辑:程序博客网 时间:2024/05/14 04:14

在此,我考虑两个思路:

第一个就是naive的,直接统计就是,扫一遍计数hash_map。不多说

第二个就是先排序,然后找到中位数,只要存在这样的数,那么就是该中位数。统计该数的值就行

void quicksort(int a[], int begin, int end){if(begin>=end)return;int pivot = a[begin];int b = begin, e = end;int mid = 0;while(begin < end){while(a[end] >= pivot && end > begin)--end;a[begin] = a[end];while(a[begin] <= pivot && begin < end)++begin;a[end] = a[begin];}mid = begin;a[mid] = pivot;quicksort(a, b, mid-1);quicksort(a, mid+1,e);}

int getMoreThanHalfNumber(int a[], int len){quicksort(a, 0, len-1);int median = a[len/2];int count = 0;for(int i=0; i<len; i++){if(median == a[i])count++;}if(count > len/2)return median;return -1;}


如果只是找出数组中出现次数超过一半的数,则

int getMoreThanHalfNumberture(int a[], int len){int count = 1; int halfNumber = a[0];for(int i=1; i<len; i++){    if(a[i] == halfNumber)++count;else--count;if(count==0){halfNumber = a[i];count = 1;}}return halfNumber;}





原创粉丝点击