LintCode 462 [Total Occurrence of Target]

原题

给出一个目标数字和一个升序整数数组,返回目标数字在数组中出现的次数。

  • 给出 [1, 3, 3, 4, 5] 并且 target = 3, 返回 2.
  • 给出 [2, 2, 3, 4, 6] 并且 target = 4, 返回 1
  • 给出 [1, 2, 3, 4, 5] 并且 target = 6, 返回 0

解题思路

  • 二分法, 分两步:找到第一个出现的位置, 找到最后一个出现的位置。就可以计算出出现频率

完整代码

class Solution:
    # @param {int[]} A an integer array sorted in ascending order
    # @param {int} target an integer
    # @return {int} an integer
    def totalOccurrence(self, A, target):
        # Write your code here
        if not A:
            return 0
            
        start, end = 0, len(A) - 1
        while start + 1 < end:
            mid = start + (end - start) / 2
            if A[mid] <= target:
                start = mid
            else:
                end = mid
        
        if A[end] == target:
            right = end
        elif A[start] == target:
            right = start
        else:
            return 0
        
        start, end = 0, len(A) - 1
        while start + 1 < end:
            mid = start + (end - start) / 2
            if A[mid] >= target:
                end = mid
            else:
                start = mid
        
        if A[start] == target:
            left = start
        elif A[end] == target:
            left = end
        else:
            return 0
            
        return right - left + 1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容