ソート配列から特定数の[Zohoインタビュー]を取得する


🤢 質問する
N個の要素を含む数列を昇順に並べます.このとき、この数列にxが現れる回数を計算してください.例えば、数列[1,1,2,2,2,3]にx=2がある場合、現在の数列には4つの値が2の要素があるため、4が出力される.
しかし,アルゴリズムを時間複雑度O(logn)として設計しなかった場合,この問題は「タイムアウト」と判定される.입력 조건
  • の第1行において、Nおよびxは整数で区切られて入力される.
    (1 <= N <= 1,000,000), (-10^9 <= x <= 10^9)
  • 行目に入力されたN個の要素は、整数でスペースで区切られています.
    (-10^9<=各要素の値<=10^9)
  • 출력 조건
  • 列の要素から、出力値がxの要素数です.要素値がxでない場合は、-1が出力されます.
  • 입력 예시1
    7 2
    1 1 2 2 2 2 3
    출력 예시 1
    4
    입력 예시 2
    7 4
    1 1 2 2 2 2 3
    출력 예시 2
    -1
    🤔 説明する
    n,x = map(int, input().split())
    array = list(map(int, input().split()))
    
    def binary_search(start, end, target, sum):
        while start<=end:
            mid = (start + end) // 2
            if mid == 7:
                return sum
            if array[mid] == target:
                sum += 1
                del array[mid]
                return sum
            elif array[mid] < target:
                start = mid + 1
            else:
                end = mid - 1
        return sum
    
    sum=0
    
    for i in array:
        sum = binary_search(0, n, x, sum)
    
    if sum == 0:
        print(-1)
    else:
        print(sum)