数字在排序数组中出现的次数

题目描述:

统计一个数字在排序数组中出现的次数。

poj 网址:http://ac.jobdu.com/problem.php?pid=1349

可以AC的代码,看主要函数就行了,该poj系统的输入输出做的太烂,我用cin不支持,老报超时的错误

 

int findFirstPos(int *arr,int target,int start,int end, int len)

{

    while(start<end)

    {

        int mid=(end-start)/2+start;

        if(arr[mid]==target)

        {

            if(mid==0 || (mid>0 && arr[mid-1]!=target))

            {

                return mid;

            }else

            {

                end=mid-1;

            }

        }else if(arr[mid]>target)

        {

            end=mid-1;

        }else

        {

            start=mid+1;

        }

    }

    if(arr[start]==target)

    {

        return start;

    }else

    {

        return -1;

    }



}

int findLastPos(int *arr, int target,int start, int end,int len)

{

    while(start<end)

    {

        int mid=(end-start)/2+start;

        if(arr[mid]==target)

        {

            if(mid==len-1 || (mid<len-1 && arr[mid+1]!=target))

            {

                return mid;

            }else

            {

                start=mid+1;

            }

        }else if(arr[mid]>target)

        {

            end=mid-1;

        }else

        {

            start=mid+1;

        }

    }

    if(arr[start]==target)

    {

        return start;

    }else

    {

        return -1;

    }

}

int timesForSequence(int *arr,int target,int start,int end,int len)

{

    int firstPos=findFirstPos(arr,target,start,end,len);

    int lastPos=findLastPos(arr,target, start, end,len);

    if(firstPos!=-1 && lastPos!=-1)

    {

        return lastPos-firstPos+1;

    }

    return 0;

}



int n,m,k,a[1000000];

inline void read(int &data) 

{ 

	char ch = getchar(); 

while (ch < '0' || ch > '9') 

	ch = getchar(); 

     data = 0; 

do{  

	data = data*10 + ch-'0'; 

	ch = getchar(); 

}while (ch >= '0' && ch <= '9');

} 

int main(int argc, const char * argv[])

{

	while(scanf("%d",&n)!=EOF)    

	{

		for(int i=0;i<n;i++)

		{

			read(a[i]);  

		}

		read(m);       

		for(int j=0;j<m;j++)

		{

			read(k);            

			cout<<timesForSequence(a,k,0,n-1,n)<<endl;

		}

	}



	return 0;

}


 

 

你可能感兴趣的:(排序)