2

配列を並べ替えました

{1,2,3,5,5,5,7,8,8}

私が送信している数がlongnのみの配列で見つかった回数を数えたいと思います。

例えば:

public static int count(int[] array,5)

返信します3

public static int count(int[] array,8)

返信します2

だから私の計画は:

1)数を見つけるために二分探索を行う

2)上部境界インデックスと下部境界インデックスを二分探索します。

3)print(top index-bottom index)は、配列内のターゲット番号の時刻を示します。

私のコードはlognですか?助けてください!:)

    public class binarySearch
{
    public static void main(String[]args)
    {
        System.out.println("d");
        int[]data={1,1,2,3,1,1,1};
        System.out.println(count(data,1));
    }

    public static int count(int[] a, int x)
    {
        int low=0;
        int high = a.length-1;
        int count=0;

        while(low <=high)
        {
            int mid=((low+high)/2);         
            if(x>a[mid])
                low=mid+1;
            if(x<a[mid])
                high=mid-1;

            if(x==a[mid])            
            {
                int top=findTopIndex(a,x,mid);                
                int bottom=findBottomIndex(a,x,mid);
                return (top-bottom);

            }

        }    
        return 111111111;

    }

    public static int findTopIndex(int[] a, int x, int index)
    {
        int low=index;
        int high = a.length-1;    
        int mid;
        if(x==a[high])
        return high;

        while(low <= high)
        {            
           mid=((low+high)/2);         
           if(x<a[mid]&&x==a[mid-1])
           return mid-1;
           else if(x==a[mid])
                low=mid+1;
           else if(a[mid]>x && a[mid-1]!=x)
           high=mid-1;


        } 
        return 11111111;

    }
    public static int findBottomIndex(int[] a, int x, int index)
    {
        int low=0;
        int high = index-1;    
        int mid;
        if(x==a[low])
        return low-1;

        while(low <= high)
        {            
         mid=((low+high)/2);         
           if(x>a[mid]&&x==a[mid+1])
           return mid;
           else if(x==a[mid])
                high=mid-1;
           else if(a[mid]<x && a[mid+1]!=x)
           low=mid+1;

        } 
        return 111;

    }

}
4

1 に答える 1

2

あなたが書いたものはあなたが必要とする解決策に本当に近いです。最初にバイナリ検索を実行して、検索している番号の単一のインスタンスを見つけます(たとえば、位置で見つかったとしましょうindex)。次に、さらに2つのバイナリ検索を実行します。1つはシーケンスを検索し0, index、もう1つindex, sizeは両方のどこまでを検索するかです。シーケンスは見つかった数です。

findTopIndexしたがって、両方にインデックスを渡して、findBottomIndexそれを利用することをお勧めします。私は全体の解決策を書くことができますが、あなたが自分でそれに来る方が良いでしょう。

于 2013-01-07T14:01:09.893 に答える