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

    https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/

    Medium

    Given an array of integers nums sorted in ascending order, 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].

    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]

    • 二分查找,需要理解对左右index上下界限如何设置。需要对左右index各做一次二分查找。
    • 查找左index时,如果遇到nums[middle] == target的情况,则还需要对左半边继续查找,因为要找到target第一次出现位置。
    • 查找右index时,选择查找target右边的第一个index,即target最后一次出现位置+1,所以在主程序里对返回结果-1。
    • https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/ 
     1 class Solution:
     2     def searchRange(self, nums: List[int], target: int) -> List[int]:
     3         if nums is None:
     4             return [-1, -1]
     5         
     6         def helper(nums, target, search_left_index):
     7             left, right = 0, len(nums)
     8             
     9             while left < right:
    10                 middle = (left + right) // 2
    11                 
    12                 # check if searching the leftmost index or not
    13                 if nums[middle] > target or (search_left_index and nums[middle] == target):
    14                     right = middle
    15                 else:
    16                     left = middle + 1
    17             
    18             return left
    19         
    20         left_index = helper(nums, target, True)
    21         
    22         if left_index == len(nums) or nums[left_index] != target:
    23             return [-1, -1]
    24         
    25         return [ left_index, helper( nums, target, False ) - 1 ]
    View Python Code
  • 相关阅读:
    NCBI SRA数据库使用详解
    自相关分析
    RandomAccessFile java
    手动安装R包
    ubuntu 设置环境变量
    Shell:Day09-2.笔记
    Shell:Day09.笔记
    Shell:Day08.笔记
    Shell:Day07.笔记
    Shell:Day06.笔记
  • 原文地址:https://www.cnblogs.com/pegasus923/p/11421109.html
Copyright © 2011-2022 走看看