人人笔试题

来源:互联网 发布:java将object转为date 编辑:程序博客网 时间:2024/05/19 20:44

给定n个数的数组a,其中超过一半数是一个定值,不进行排序,不开设额外数组,如何最高效找到这个数

int find(int *a,int n)

假如可以排序,排序后直接输出中间的数就可,在不能排序的情况下可以,先假设一个计数器,为0时直接假定下面取的数是这个数,然后与后面的数比较相等计数加一,不等减

#include<iostream>#include<queue>#include<stdio.h>#include<algorithm>using namespace std;int find(int *a,int n){int count=0;int temp;for(int i=0;i<n;i++){if(count!=0){if(temp==a[i])count++;elsecount--;}else{temp=a[i];count++;}}return temp;}int main(){int a[]={2,3,3,5,3,1,2,3,3};cout<<find(a,sizeof(a)/sizeof(a[0]));}


原创粉丝点击