まあ、特に@Mattiasのおかげで、そのアルゴはいいですね。とにかく私は自分でやったことで、より良い結果が得られるように思えますが、アルゴ鉱山と@Mattiasの両方の複雑さを測定するのに誰かが助けてくれるか、誰かがより良い解決策を持っているなら、それは歓迎です....とにかく、ここに私が見つけた問題の解決策があります。
int upperBound(int[] array,int lo, int hi, int key)
{
int low = lo-1, high = hi;
while (low+1 != high)
{
int mid = (low+high)>>>1;
if (array[mid]> key) high=mid;
else low=mid;
}
int p = low;
if ( p >= hi || array[p] != key )
p=-1;//no key found
return p;
}
これは最初のオカレンスです。また、他の同様の投稿で同じものを更新します。バイナリ検索での最初のオカレンス
int lowerBound(int[] array,int lo, int hi, int key)
{
int low = lo-1, high = hi;
while (low+1 != high)
{
int mid = (low+high)>>>1;
if (array[mid]< key) low=mid;
else high=mid;
}
int p = high;
if ( p >= hi || array[p] != key )
p=-1;//no key found
return p;
}