zoukankan      html  css  js  c++  java
  • 53-1-在排序数组中查找数字

    题目:数字在排序数组中出现的次数。输入为一个排序数组和一个数字。

    def get_first_num(nums,k,start,end):
        if start>end:
            return -1
        mid = (end+start)//2
        if nums[mid]==k:
            if mid==0 or (mid>0 and nums[mid-1]!=k):
                return mid
            else:
                end = mid-1
        elif nums[mid]>k:
            end = mid-1
        else:
            start = mid+1
    
        return get_first_num(nums,k,start,end)
    
    def get_end_num(nums,k,start,end):
        if start>end:
            return -1
        mid = (end + start) // 2
        if nums[mid]==k:
            if mid==len(nums)-1 or (mid<len(nums)-1 and nums[mid+1]!=k):
                return mid
            else:
                start = mid
        elif nums[mid]>k:
            end = mid-1
        else:
            start = mid+1
        return get_end_num(nums,k,start,end)
    
    def get_num_k(nums,k):
        start = get_first_num(nums,k,0,len(nums)-1)
        end = get_end_num(nums,k,0,len(nums)-1)
        print(start,end)
        return end-start+1
    

      注:一般解决方式为利用字典统计各个数字出现的次数或者用二分法查找到其中一个目标数字,然后前后再前后查找。这两种方式的时间复杂度都为O(n)。

    O(lgn)的方法为使用两次二分查找,第一次查找目标数字第一次出现的位置,第二次查找其最后一次出现的位置,最后两者相减即为目标数的个数。

  • 相关阅读:
    leetcode231
    leetcode326
    leetcode202
    leetcode121
    leetcode405
    leetcode415
    2019-9-2-win10-uwp-应用转后台清理内存
    2019-9-2-win10-uwp-应用转后台清理内存
    ACM学习心得
    ACM学习心得
  • 原文地址:https://www.cnblogs.com/kingshine007/p/11502743.html
Copyright © 2011-2022 走看看