#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Search for a Range
Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1].
For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].
'''
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
length = len(nums)
if length == 0:
return [-1,-1]
left,right = 0,length - 1
index = 0
while left <= right:
index = (left + right)>>1
val = nums[index]
if val == target:
if index > 0 and nums[index - 1] == target:
right = index - 1
else:
break
elif val > target:
right = index - 1
else:
left = index + 1
if nums[index] != target:
return [-1,-1]
if index == length - 1 or nums[index + 1] != target:
return [index,index]
ret = index
left,right = index + 1,length - 1
index = index + 1
while left <= right:
index = (left + right)>>1
val = nums[index]
if val == target:
if (index + 1) < length and nums[index + 1] == target:
left = index + 1
else:
break
elif val > target:
right = index - 1
else:
left = index + 1
if nums[index] != target:
index = ret
return [ret,index]
if __name__ == "__main__":
s = Solution()
print s.searchRange([5, 7, 7, 8, 8, 10],8)
31 leetcode - Search for a Range
最新推荐文章于 2024-11-17 18:49:52 发布