【发布时间】:2013-02-27 14:19:23
【问题描述】:
那么问题如下:
首先,我使用 Python 进行编码。
我有一个排序自然数“givenY”的数组(Numpy 数组,但如果有帮助,我可以将其更改为列表)。我想找到并指向位于两个指定值a=Y[i] 和b=Y[i+1] 之间的第一个和最后一个元素。我编写了代码,但我相信我是以最糟糕的方式之一,我不确定代码是否在时间上有效。因此,如果我能获得 cmets 或获得从头开始编写它的建议,我会很高兴。重要的是在Y[i]和Y[i+1]之间没有givenY的元素时有很多例外情况(通过分配-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。
非常感谢。
【问题讨论】:
-
请提供样例输入输出。
-
什么是
givenY,是列表吗?
标签: python arrays intervals binary-search