题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param data int整型一维数组 # @param k int整型 # @return int整型 # class Solution: def GetNumberOfK(self , nums: List[int], target: int) -> int: # write code here count=0 #如果nums为空,返回0个和k相等的元素 if not nums: return 0 low=0 high =len(nums) - 1 mid = (high +low)//2 while True: if high==low and nums[high]!= target: return 0 #else: # return nums[high] #特殊情况下只有元素本身,没有和它相同的元素,找到返回1,找不到返回0即可 elif mid==high or mid ==low: if nums[low]==target: return 1 elif nums[high] ==target: return 1 else: return 0 if target < nums[mid]: high=mid elif target > nums[mid]: low=mid elif target == nums[mid]: x=mid #x先向右边遍历和x相等的元素 while x !=(len(nums)-1): if nums[x]==nums[x+1]: x+=1 count+=1 else: break #再向着右边遍历和x相等的元素 while mid !=0: if nums[mid] == nums[mid-1]: mid-=1 count+=1 else: break #返回左右遍历后的元素总量count,再加上自身返回 return count+1 mid = (high +low)//2