在排序数组中查找元素的第一个和最后一个位置python3(leetcode34)

#leetcode34. 在排序数组中查找元素的第一个和最后一个位置

#给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始#位置和结束位置。

#如果数组中不存在目标值 target,返回 [-1, -1]。

#输入:nums = [5,7,7,8,8,10], target = 8;输出:[3,4]

class Solution(object):
    def searchRange(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        def find_right(nums, target):
            l, r =0, len(nums)-1
            while l <= r:
                mid = (l + r)//2
                if target < nums[mid]:
                    r = mid - 1
                elif target > nums[mid]:
                    l = mid + 1
                elif ((mid==len(nums)-1 or nums[mid+1]>target) and nums[mid]==target):
                    return mid
                else: #其他满足nums[mid]==target但是不满足nums[mid+1]>target
                    l = mid + 1
            return -1

        def find_left(nums, target):
            l, r =0, len(nums)-1
            while l <= r:
                mid = (l + r)//2
                if target < nums[mid]:
                    r = mid - 1
                elif target > nums[mid]:
                    l = mid + 1
                elif ((mid==0 or nums[mid-1]<target) and nums[mid]==target):
                    return mid
                else: #其他满足nums[mid]==target但是不满足nums[mid-1]<target
                    r = mid - 1
            return -1
        
        left, right = find_left(nums, target), find_right(nums, target)
        
        return [left, right]

Guess you like

Origin blog.csdn.net/ziqingnian/article/details/121783878