#coding:utf-8
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @param k int整型 
# @return int整型
#
class Solution:
    def GetNumberOfK(self , nums , k ):
        # write code here
        if nums == None or len(nums) <= 0:
            return 0
        if len(nums) == 1:
            if nums[0] == k:
                return 1
            else:
                return 0
        left_bd = self.get_left_bound(nums, k)
        right_bd = self.get_right_bound(nums, k)

        return right_bd - left_bd + 1
    
    def get_left_bound(self, nums, k):
        n = len(nums)
        left = 0
        right = n - 1
        while left <= right:
            mid = left + (right - left) // 2
            #print ("Mid, mid val: ", mid, nums[mid])
            if nums[mid] >= k:
                right = mid - 1
            else:
                left = mid + 1
        #print ("left, nums[left]: ", left, nums[left])
        #print ("right, nums[right]: ", right, nums[right])
        return left

    def get_right_bound(self, nums, k):
        n = len(nums)
        left = 0
        right = n - 1
        while left <= right:
            mid = left + (right - left) // 2
            if nums[mid] <= k:
                left = mid + 1
            else:
                right = mid - 1
        #print ("right, nums[right]: ", right, nums[right])
        return right