zoukankan      html  css  js  c++  java
  • Leetcode 34. Find First and Last Position of Element in Sorted Array

    Description: Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value. If target is not found in the array, return [-1, -1].

    Follow up: Could you write an algorithm with O(log n) runtime complexity?

    Link: 34. Find First and Last Position of Element in Sorted Array

    Examples:

    Example 1:
    Input: nums = [5,7,7,8,8,10], target = 8
    Output: [3,4]
    
    Example 2:
    Input: nums = [5,7,7,8,8,10], target = 6
    Output: [-1,-1]
    
    Example 3:
    Input: nums = [], target = 0
    Output: [-1,-1]

    思路: 首先用正常的二分查找流程找到target所在的任意index,如何找不到就返回[-1,-1],如果找到了,当前mid = index所在的区间[l,r]一定包含目标值的start,end,再在这里区间中分别确定start 和 end 的位置。也是利用二分查找。start可能在[l,mid-1]里,end可能在[mid+1,r]里,过一个例子就知道start=sl,end=er.

    class Solution(object):
        def searchRange(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: List[int]
            """
            if not nums: return [-1,-1]
            n = len(nums)
            l, r = 0, n-1
            while l <= r:
                mid = int((l+r)/2)
                if nums[mid] == target:
                    sl = l
                    sr = mid-1
                    while sl <= sr:
                        sm = int((sl+sr)/2)
                        if nums[sm] == target:
                            sr = sm - 1
                        else:
                            sl = sm + 1
                    el = mid+1
                    er = r
                    while el <= er:
                        em = int((el+er)/2)
                        if nums[em] == target:
                            el = em + 1
                        else:
                            er = em - 1
                    return [sl, er] 
                elif target > nums[mid]:
                    l = mid + 1
                else:
                    r = mid - 1
            return [-1,-1]

    日期: 2021-04-10 所有人,所有事都在告诉我,没有人能随随便便成功,要坚持啊!

  • 相关阅读:
    day04用户交互和运算符
    day04垃圾回收机制
    day4
    B2. K for the Price of One (Hard Version)
    C. New Year and Permutation
    Rational Ratio
    C. Two Arrays
    D. MEX maximizing
    B. Infinite Prefixes
    C. Obtain The String
  • 原文地址:https://www.cnblogs.com/wangyuxia/p/14642370.html
Copyright © 2011-2022 走看看