2017-05-22 15 views
0

ソートされた配列から、指定されたキーから次の最大値の位置を返すバイナリ検索の修正版を実装しようとしています。ここで変更されたバイナリ検索の無限ループ

lli search(vector<lli>arr,lli key) 
{ 
    lli low=0,high=arr.size() - 1,mid,pos=-1; 

    while(low<=high) 
    { 
     mid=low + (high-low)/2; 

     if(arr[mid]<key) 
      low=mid+1; 
     else{ 
       pos=mid; 
       high=mid-1; 
      } 
    } 
    return pos; 
} 

ARRがソートされた配列であり、我々は配列arrにおけるキーより次の最大の要素の位置を見つけなければならない(LLIが長いlong int型を指し) -

は、ここでは、コードです。

私はキーが[min(arr)、max(arr)]の間にあることに注意しましたので、posは[0、arr.size() - 1]の値を持ちます。

このメソッドは、私が考えることができる多くの値に対して実行されますが、オンラインジャッジはTime Limit Exceededエラーでそれを拒否します。ここで無限ループが可能ですか?

+0

を使用することができますか?バイナリ検索を変更する方法は? –

+0

@AlexSの高低は10^9までの値なので、mid =(high + low)/ 2の値を加えると問題が発生する可能性があります。 –

答えて

0

あなたは、通常のバイナリ検索として解決するが、なぜあなたはそのように半ばを計算している

if (arr[mid] == key){ 
    if (mid == arr.size() - 1) 
     return -1; // key was the last element, there is nothing after it 
    return mid + 1; 
} 
関連する問題