zoukankan      html  css  js  c++  java
  • 数字在排序数组中出现的次数

    题目描述:

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

    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;
    }
    


  • 相关阅读:
    Windows Messenger 5.1 [Download from Microsoft]
    Building Web Parts for SPS读书笔记(2)
    Resources for KM & SharePoint Portal
    Microsoft.SharePoint.Menu Web Part [Free]
    忽略PNG透明区域的事件(AS/Flash)
    android webView 使用方法
    Android开发之Android开发规范(初)
    Android 下使用 JSON 实现 HTTP 请求
    html5 canvas 简单画板实现代码
    设定麦克风的声音品质
  • 原文地址:https://www.cnblogs.com/riskyer/p/3228865.html
Copyright © 2011-2022 走看看