首页 > 试题广场 >

找出指定数在数组中的范围

[编程题]找出指定数在数组中的范围
  • 热度指数:1367 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一个排好序的整数数组,找到指定目标数的开始和结束位置。如果指定的数字不在数组中,则输出 [-1,-1]。例如,输入数组为[5, 7, 7, 8, 8, 10], 目标数为8, 输出[3, 4].本题会人工判题,要求时间复杂度O(logn)

输入描述:
输入数据包括两行:
第一行两个整数n(1 ≤ n ≤ 10 ^ 5),和需要查找的数target
第二行n个整数,范围均在32位整数内,以空格分隔


输出描述:
输出格式为[begin,end],如果不存在就输出[-1,-1]
示例1

输入

6 8 5 7 7 8 8 10

输出

3 4
啊啊啊啊,老通不过。。。求大神指导一下,为啥啊
n, target = map(int, input().strip().split())
array = list(map(int, input().strip().split()))
length = len (array)
if length == 0:
    print([-1,-1])
if array[0] <= target and array[-1] >= target:
    left, right = 0,length-1
while left <= right:
    mid = (left + right) // 2
    if array[mid] == target:
        right = left = mid
        while left-1 >= 0 and array[left-1] == target:
              left -= 1
        while right+1 <= length-1 and array[right+1] == target:
              right += 1
        print([left, right])
        break
    elif array[mid] < target:
          left = mid + 1
    else:
          right = mid - 1


发表于 2019-08-22 18:00:49 回复(0)