那麼問題如下:查找位於兩個值之間的數組的元素
首先,我使用Python進行編碼。 我有一個數組(numpy數組,但如果它可以是任何幫助,我可以將它更改爲列表)的排序自然數,「givenY」。我想找到並指向第一個也是最後一個元素,它落在兩個指定值a=Y[i]
和b=Y[i+1]
之間。我編寫了代碼,但我相信我以最糟糕的一種方式做了,而且我不確定代碼是否在時間上有效。所以我會很高興,如果我能得到意見或建議從頭開始寫。重要的是,在Y[i]
和Y[i+1]
(它們通過分配-1
開始處理)之間沒有給定Y的元素時,存在許多特殊情況。我的代碼是:
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;
一些簡單的輸入和輸出:
對於givenY = [2,5,8,10]:
- A = 3,B = 4,輸出:無在值之間的(起始= -1在我的代碼)
- 一個= 2,b = 5,輸出:在這兩個值之間沒有數值(在我的代碼中start = -1)
- a = 2,b = 9輸出:start = 1,end = 2
- a = 1,b = 10,輸出:開始= 0,結束= 2
- a = 1,b = 11,輸出:開始= 0,結束= 3
- a = 11,b = 12,輸出:開始= -1在我的代碼)
- a = 0,b = 2,輸出:在這兩個值之間沒有(起始= -1)
- a = 3,b = 3,輸出:代碼)
- A = 5,b = 5,輸出:無在值之間的(起始= -1在我的代碼)
在我目前的工作的情況下,b爲總是大於a。
非常感謝。
請提供樣本輸入和輸出。 – ATOzTOA 2013-02-26 17:18:03
什麼是'givenY',這是一個列表嗎? – ATOzTOA 2013-02-26 17:25:59