Python代码如下(最近在熟悉Python所以接下来的解题报告会尽量使用Python):
def solution(A, B, C):
# write your code in Python 2.6
# for each plank find the nearest nail, to do this
# we can first binary search the nearest coordinate of nail,
# and then traverse the following sorted nail (according to coordinate) to find the nearest # original nail index until not qualified anymore
# sort nails and keep record of original nail index
nails = sorted(enumerate(C), key = lambda x: x[1])
# for each plankIndex find the nail with minimum index
globalMinimumIndex = 0
for plankIndex in xrange(0, len(A)):
localMinimumIndex = getMinimumIndexOfNail(A[plankIndex], B[plankIndex], nails, globalMinimumIndex)
globalMinimumIndex = max(globalMinimumIndex, localMinimumIndex)
if globalMinimumIndex == len(C):
return -1
return globalMinimumIndex+1
def getMinimumIndexOfNail(startPos, endPos, nails, prevResultIndex):
# using binary search to find the nail with nearest position
left = 0
right = len(nails)-1
while left <= right:
mid = (right-left)/2+left
if nails[mid][1] >= startPos:
right = mid-1
else:
left = mid+1
if left == len(nails) or nails[left][1] > endPos:# can not find a qualified nail
return len(nails)
# linear traverse to find the qualified nail with smaller index
resultIndex = nails[left][0]
for nextPossiblePos in xrange(left+1, len(nails)):
if nails[nextPossiblePos][1] > endPos:
break
resultIndex = min(resultIndex, nails[nextPossiblePos][0])
if prevResultIndex >= resultIndex:# importan cut off, prevResultIndex is ascending
return prevResultIndex
return resultIndex