zoukankan      html  css  js  c++  java
  • 【leetcode】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].

    解题思路:

    明显的简单二分问题,首先用二分找到一个满足条件的点,然后向两边延展即可

    coding=utf-8

    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):
            l = len(A)
            left = 0 
            right = l-1
            index1 = -1
            index2 = -1
            pos = -1
            while left <= right:
                mid = (left + right) / 2
                if A[mid] == target:
                    pos = mid
                    break
                elif A[mid] > target:
                    right = mid - 1
                else:
                    left = mid + 1
            #print pos
            if pos == -1:
                return [-1,-1]
            index1 = index2 = pos
            while A[index1] == target and index1 > 0 and A[index1-1] == target:
                index1 -= 1
            while A[index2] == target and index2 < l-1 and A[index2+1] ==target:
                index2 += 1
            return [index1,index2]
    
    s = Solution()
    a = [5, 7, 7, 8, 8, 10]
    print s.searchRange(a,8)
    a = [1]
    print s.searchRange(a,1)
  • 相关阅读:
    春色人间
    如是
    Go -- FileManage 自建云盘
    JavaScript -- 定义二维数组
    mysql 碎片清理
    vue2.0项目中使用Ueditor富文本编辑器示例
    浅谈css中一个元素如何在其父元素居中显示
    CSS -- 文字竖直居中
    memcached与redis区别
    mac -- 安装OpenCV
  • 原文地址:https://www.cnblogs.com/MrLJC/p/4173643.html
Copyright © 2011-2022 走看看