2

I was asked this question recently in an interview :

What is the most efficient way to find a repeated number in a sorted array?

My answer was based on using a hash table with key as array element and number of repetitions in array as value; iterate the array and update hash table. In the end, hash table can be checked for elements with count > 1 ; those are the repeated elements.

Is there a better way to do this ?

Thanks.

4

4 に答える 4

3

さて、あなたはのスペースでこれを行うことができますO(1)。ソートされた配列なので、現在の数値を次の数値で減算するために必要なことはすべてあります。結果が次の0場合、繰り返し番号があります。

于 2012-05-29T04:32:30.410 に答える
2

配列内のすべての要素(最後の要素を除く)を次の要素で確認します。それらが等しい場合は、停止して終了します。繰り返し要素が見つかりました。これは、配列が並べ替えられているために機能し、追加のスペースを必要とせず、最悪の場合(繰り返される要素がない場合)、すべての配列をトラバースする必要があるため、O(n)になります。

于 2012-05-29T04:35:17.100 に答える
0

-配列を並べ替えます

-隣接するインデックス値の違いを見つける

-差が0の場合、繰り返しがあり、インデックスに注意してください

于 2012-05-29T04:45:19.713 に答える
-1
public static int searchrepeativeVal(int a[]){

    int left =0;
    int right= a.length;
    int mid;

    while (right-left>1){

        mid= (left+right)/2;

        if(a[mid]!=mid+1){
            if(a[mid]== mid){
                return mid;
            }else{
                right=mid;
            }
        }else{

            if(a[mid]==mid ){
                return mid;
            }else{
                left =mid;
            }
        }
    }

    return -1;
}
于 2017-06-17T05:31:44.450 に答える