在排序數組中找出給定數字出現的次數

這個思路不是很難,由於平時練習甚少,還是在細節浪費了一些時間,以後注意細節
:先用二分法找到給定數字,然後找它左面出現幾次,右面出現幾次,然後相加

#include<stdio.h>
int main(void)
{
        int n,a[]={1,2,2,3,4,4,4,4,4,5,6,7,7,7,7,8,9,10,11,11,11,12,13};
        int start,end,mid,find,q,h,i=0,j=0;
        n=sizeof(a)/sizeof(int);
        start=0;
        end=n-1;
        scanf("%d",&find);//輸入要查找的數字
        while(start<end)//二分查找
        {
                mid=(start+end)/2;
                if(a[mid]<find)  start=mid+1;
                else if(a[mid]>find) end=mid-1;
                else  break ;//找到,退出循環
        }
        q=h=mid;

        while(q*h!=1)//統計個數
        {
                        if(a[q-i]==find)        {i++;}//統計左面有幾個
                         else q=-1;

                        if(a[h+j]==find)        {j++;}//統計右面有幾個
                        else h=-1;
        }
        if(i==0&&j==0) printf("1");//當重複數字只有一個時
        else   printf("%d",i+j-1);
}
發佈了97 篇原創文章 · 獲贊 440 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章