質問は次のとおりです。
まず、Pythonでコーディングしています。ソートされた自然数「givenY」の配列(Numpy配列ですが、何か助けになる場合はリストに変更できます)があります。a=Y[i]
2つの指定された値との間にある最初と最後の要素を見つけてポイントしたいと思いますb=Y[i+1]
。私はコードを書きましたが、可能な限り厄介な方法の1つで書いたと思います。また、コードが時間的に効率的かどうかはわかりません。ですから、コメントや提案を一から書いていただければ幸いです。Y[i]
重要なことは、との間にgivenYの要素がない場合Y[i+1]
(startに割り当てることによって処理される) 、多くの例外的な状況があることです-1
。私のコードは次のとおりです。
startRes=binSearch(givenY,Y[i]);
endRes=binSearch(givenY,Y[i+1]);
start=startRes[1]
end=endRes[1];
if(givenY.size==0 or (givenY.size>0 and givenY[start]<=Y[i])):
start=startRes[1]+1;
if(endRes[0]):
end=endRes[1]-1;
if end<start or (givenY.size>0 and (givenY[end]>Y[i+1] or givenY[start]>=Y[i+1])) or givenY[end]<=Y[i]:
start=-1;
startRes=binSearch(givenY,a);
endRes=binSearch(givenY,b);
start=startRes[1]
if startRes[0]:
start=start+1;
end=endRes[1]-1;
そしてこれはbinSearchの実装です:
def binSearch(arr,element):
left=0
right=arr.size;
mid=(left+right)/2
while left<right:
mid=(left+right)/2
if(arr[mid]<element):
left=mid+1;
elif (arr[mid]>element):
right=mid;
else:
return True,mid;
return False,left;
いくつかの簡単な入力と出力:
与えられたY=[2,5,8,10]の場合:
- a = 3、b = 4、出力:値の間にありません(私のコードではstart = -1)
- a = 2、b = 5、出力:値の間にありません(私のコードではstart = -1)
- a = 2、b = 9出力:start = 1、end = 2
- a = 1、b = 10、出力:start = 0、end = 2
- a = 1、b = 11、出力:start = 0、end = 3
- a = 11、b = 12、出力:値の間にありません(私のコードではstart = -1)
- a = 0、b = 2、出力:値の間にありません(私のコードではstart = -1)
- a = 3、b = 3、出力:値の間にありません(私のコードではstart = -1)
- a = 5、b = 5、出力:値の間にありません(私のコードではstart = -1)
私が現在働いている場合、bは常にaよりも大きくなります。
どうもありがとう。