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