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 所有人,所有事都在告诉我,没有人能随随便便成功,要坚持啊!

  • 相关阅读:
    DGL学习(六): GCN实现
    DGL学习(五): DGL构建异质图
    DGL学习(四): 图分类教程
    LuoGuP2495:[SDOI2011]消耗战
    LuoGuP1121:环状最大两段子段和
    LuoGuP3177:[HAOI2015]树上染色
    LuoGuP2607:[ZJOI2008]骑士
    HDU4283:You Are the One
    LuoGuP4294:[WC2008]游览计划
    LuoGuP4127:[AHOI2009]同类分布
  • 原文地址:https://www.cnblogs.com/wangyuxia/p/14642370.html
Copyright © 2011-2022 走看看