题解 | #数字在升序数组中出现的次数#

数字在升序数组中出现的次数

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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务