題目:數字在排序陣列**現的次數。輸入為乙個排序陣列和乙個數字。
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 (midk:
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)的方法為使用兩次二分查詢,第一次查詢目標數字第一次出現的位置,第二次查詢其最後一次出現的位置,最後兩者相減即為目標數的個數。
53 1 在排序陣列中查詢數字 I
統計乙個數字在排序陣列 現的次數。示例 1 輸入 nums 5,7,7,8,8,10 target 8 輸出 2 示例 2 輸入 nums 5,7,7,8,8,10 target 6 輸出 0限制 方法一 遍曆法,時間輔助度為n class solution else upperbound nums...
在排序陣列中查詢數字
題目一 數字在排序陣列 現的次數。統計乙個數字在排序陣列 現的次數。例如,輸入排序 陣列和數字3,由於3在這個數 組 現了4次,因此輸出4。設計乙個改進的二分查詢法,分別查詢陣列中第乙個該數字和最後乙個該數字,找到之後 利用索引計算中間該數字的個數 package helen.c public cl...
在排序陣列中查詢數字
統計乙個數字在排序陣列 現的次數。例如,輸入排序陣列和數字3,由於3在這個陣列 現了4次,因此輸出4。有序陣列,二分查詢 思路 用二分查詢分別找到待找數字的第乙個和最後乙個 class solution def getnumberofk self,data,k number 0 if data no...