31 leetcode - Search for a Range

来源:互联网 发布:mac和投影仪无线连接 编辑:程序博客网 时间:2024/04/28 12:20
#!/usr/bin/python# -*- coding: utf-8 -*-'''Search for a RangeGiven 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)
0 0
原创粉丝点击