zoukankan      html  css  js  c++  java
  • LeetCode#34 Search for a Range

    Problem Definition:

    Given 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].

    Solution:

    有序数组,二分查找。这里要查找的是一个范围,[start-->end]。

    当进行二分查找时,会找到很多个[start-->end],应该合并为一个大的范围。即要找到最大的end和最小的start。

     1     # @param {integer[]} nums
     2     # @param {integer} target
     3     # @return {integer[]}
     4     def searchRange(self, nums, target):
     5         rg=[2147483647, -1]
     6         self.recur(nums, target, 0, len(nums)-1, rg)
     7         if rg[0]==2147483647:
     8             rg[0]=-1
     9         return rg
    10         
    11     def recur(self, nums, target,start, end, rg):
    12         if nums[start]>target or nums[end]<target:
    13             return
    14         if start==end: #only one element
    15             if nums[start]==target:
    16                 rg[0]=min(rg[0], start)
    17                 rg[1]=max(rg[1], end)
    18         else:
    19             mid=(start+end)/2
    20             if nums[mid]>target:
    21                 self.recur(nums, target, start, mid, rg)
    22             elif nums[mid]<target:
    23                 self.recur(nums, target, mid+1, end, rg)
    24             else:
    25                 self.recur(nums, target, start, mid, rg)
    26                 self.recur(nums, target, mid+1, end, rg)

    解释:

    1)用一个二元的数组rg来存放起止点的下标。

    2)如果一个子数组,它起始的元素就已经比目标target要大,或者它的终止位置比target要小,就直接退出当前的查找了。

    3)如果数组中间位置刚好等于target,则应该往左右两部分分别继续去查找。

  • 相关阅读:
    BZOJ 1040 (ZJOI 2008) 骑士
    BZOJ 1037 (ZJOI 2008) 生日聚会
    ZJOI 2006 物流运输 bzoj1003
    ZJOI 2006 物流运输 bzoj1003
    NOI2001 炮兵阵地 洛谷2704
    NOI2001 炮兵阵地 洛谷2704
    JLOI 2013 卡牌游戏 bzoj3191
    JLOI 2013 卡牌游戏 bzoj3191
    Noip 2012 day2t1 同余方程
    bzoj 1191 [HNOI2006]超级英雄Hero——二分图匹配
  • 原文地址:https://www.cnblogs.com/acetseng/p/4702227.html
Copyright © 2011-2022 走看看