題目描述
統計乙個數字在排序陣列中出現的次數。
解題思路1:
因為是乙個有序的,所以使用二分查詢找出第乙個比k大的那一位然後依次遍歷。
class
solution:
defgetnumberofk
(self, data, k):
# write code here
ifnot data or data[-1] < k or data[0] > k: #判斷k是否可能在data中,不在則返回0
return
0 cum = 0
#尋找的是第一大於k的索引
#從0到最後一位的索引加1,這樣當最後一位就是k的時候,索引也依舊比這一位大於1,所以不用單獨考慮
i, j = 0, len(data)
#返回第乙個大於k的數。
while i < j:
mid = (i + j) // 2
if data[mid] > k:
j = mid
else:
i = mid + 1
#因為返回的是第乙個比k大的索引,所以要減1
while data[j-1] == k and j-1>=0:
cum+=1
j-=1
return cum
解法二:
找到第乙個k和最後乙個k的索引,然後相減加1。
class
solution:
defgetnumberofk
(self, data, k):
# write code here
ifnot data or data[-1] < k or data[0] > k: #判斷k是否可能在data中,不在則返回0
return
0def
get_right
(data,k):
start,end = 0, len(data) -1
while start <= end:
mid = (start + end) // 2
if data[mid] > k:
end = mid - 1
else:
res = mid
start = mid + 1
return res
defget_left
(data,k):
start,end = 0, len(data) -1
while start <= end:
mid = (start + end) // 2
if data[mid] < k:
start = mid + 1
else:
res = mid
end = mid - 1
return res
return get_right(data,k) - get_left(data,k) + 1
數字在排序陣列中出現次數
統計乙個數字在排序陣列中出現的次數。思路 求乙個數字在這個排序陣列中出現的次數,首先想到的是使用二分查詢,當我找到乙個位置,然後往前就可以到達最前面第乙個出現該數字的位置,往後就可以到達最後面最後乙個出現該數字的位置,然後兩個位置相減此時就得到該數字出現的次數。但是問題在於我用二分查詢到位置後,然後...
數字在排序陣列中出現的次數
何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 統計乙個數字在排序陣列中出現的次數。輸入 每個測試案例包括兩行 第一行有1個整數n,表示陣列的大小。1 n 10 6。第二行有n個整數,表示陣列元素,每個元素均為int。第三行有1個整數m,表示接下來有m次查詢。1 m 10 ...
數字在排序陣列中出現的次數
題目 統計乙個數字下排序陣列中出現的次數。例如輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4。當然第一眼就能想到遍歷這個陣列然後統計這個陣列中某個數字出現的次數。當然第一眼就能想到的方法通常來說效率都不怎麼樣 再稍微想一下這個題目,是乙個已序的陣列,所以呢,不難想到二分查詢。我們可以...