zoukankan      html  css  js  c++  java
  • [Leetcode][Python]34: Search for a Range

    # -*- coding: utf8 -*-
    '''
    __author__ = 'dabay.wang@gmail.com'

    34: Search for a Range
    https://oj.leetcode.com/problems/search-for-a-range/

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

    ===Comments by Dabay===
    二分查找。
    当target在中间的时候,往两边扩展。
    '''

    class Solution:
    # @param A, a list of integers
    # @param target, an integer to be searched
    # @return a list of length 2, [index1, index2]
    def searchRange(self, A, target):
    def expend(nums, index):
    left = right = index
    while left - 1 >= 0 and nums[left - 1] == nums[index]:
    left -= 1
    while right + 1 < len(nums) and nums[right + 1] == nums[index]:
    right += 1
    return [left, right]

    l, r = 0, len(A) - 1
    while l <= r:
    m = (l + r) /2
    if A[m] == target:
    return expend(A, m)
    elif A[m] < target:
    l = m + 1
    else:
    r = m - 1
    else:
    return [-1, -1]


    def main():
    sol = Solution()
    nums = [2,2]
    target = 2
    print sol.searchRange(nums, target)


    if __name__ == '__main__':
    import time
    start = time.clock()
    main()
    print "%s sec" % (time.clock() - start)
  • 相关阅读:
    Oracle 函数
    Oracle select into from 和 insert into select
    SQL 子查询
    Java ThreadLocal 学习
    Structs 2
    Spring知识点
    java循环HashMap两种方法的效率比较
    Spring 面试复习
    Hibernate 知识点复习
    java 面试 复习 II
  • 原文地址:https://www.cnblogs.com/Dabay/p/4271401.html
Copyright © 2011-2022 走看看