Leetcode Link: 剑指 Offer 53 - I. 在排序数组中查找数字 I - 力扣(LeetCode)

题目

解法一

思路: 红蓝二分,两次二分,每次的 isBlue 不同。

题解

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        l = -1
        r = len(nums)
        while(l+1 != r):
            mid = (l+r) >> 1
            if nums[mid] < target:
                l = mid
            else:
                r = mid
        if r >= len(nums) or nums[r] != target: return 0
        left_bound = r
 
 
        l = -1
        r = len(nums)
        while(l+1 != r):
            mid = (l+r) >> 1
            if nums[mid] <= target:
                l = mid
            else:
                r = mid
        right_bound = l
        return right_bound - left_bound + 1

解法二

思路: 暴力,一个一个看就行

题解

class Solution: 
	def search(self, nums: List[int], target: int) -> int: 
		cnt = 0 
		for i in range(len(nums)): 
			if nums[i] == target: 
				cnt += 1 
		return cnt

解法三

思路: 哈希表,利用Counter找一下就行,然后利用好dict.get()的默认返回值

题解

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        d = Counter(nums)
        return d.get(target, 0)

启发和联系