leetcode第34题,二分查找,由于限制住了复杂度为O(logn),因此线性查找肯定不行了,必须使用二分。
二分查找算法原理不难,但是在实际编码的过程中边界是需要好好处理的一个地方,另外,二分查找后只找出了一个目标元素,需要做的就是在这个元素的基础上向两边继续搜索是否还有相等的元素即可。
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
ans = [-1,-1]
if nums == None or len(nums) < 1:
return ans
n = len(nums)
left = 0;right = n-1
while left <= right:
mid = (left+right)/2
if nums[mid] < target:
left = mid+1
elif nums[mid] > target:
right = mid-1
else:
ans = [mid,mid]
break
print ans
if ans[0] == -1:return ans
while ans[0] > 0 and nums[ans[0]-1] == target:
ans[0] -= 1
while ans[1] < n-1 and nums[ans[1]+1] == target:
ans[1] += 1
return ans