LeetCode-剑指 Offer 53 - I. 在排序数组中查找数字 I

统计一个数字在排序数组中出现的次数。

最简单python语句,可能并不是出题人的意愿:

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        return nums.count(target)

当然这题用二分试试:
def two(num, target, flag),利用flag来对左右边界的限定条件进行区分,提高代码的利用率。思路就是用二分法
当num[mid]大于target值的时候,找到了右节点,最后下标减一就好了;
当num[mid]大于等于target值的时候,找到了左节点;
每次比较中间值,符合要求就把mid赋值给ans,通过ans记录下标的位置,全部循环完之后返回ans

最后通过left<=right判断是否存在,如果不存在,二分法的结果left肯定是大于right的。
存在输出right - left + 1,否则输出0

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        def two(num, target, flag):
            left, right, ans = 0, len(num) - 1, len(num)
            while left <= right:
                mid = int((left + right) / 2)
                if num[mid] > target or (flag and num[mid] >= target):
                    right = mid - 1
                    ans = mid
                else:
                    left = mid + 1
            return ans
        left = two(nums, target, True)
        right = two(nums, target, False) - 1
        if left <= right:
            return right - left + 1
        else:
            return 0

posted @ 2021-07-16 10:35  小Aer  阅读(3)  评论(0编辑  收藏  举报  来源