劍指offer 53 在排序陣列中查詢數字

2021-10-03 21:37:35 字數 1105 閱讀 2968

給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。

你的演算法時間複雜度必須是 o(log n) 級別。 

思路:

看到「排列陣列」,第一反應就得是二分查詢。但是一般的二分,如果在中點處剛好找到乙個數等於target,那接下來往哪邊走呢?沒辦法判斷,所以考慮用兩次二分,一次找起始下標,一次找結束下標。(注意找結束下標時mid=(low+high+1)//2,以及一些特殊情況的判斷)

class solution(object):

def searchrange(self, nums, target):

""":type nums: list[int]

:type target: int

:rtype: list[int]

"""low, high = 0, len(nums)-1 # 第一次二分,找起始下標

while low < high:

mid = (low + high) // 2

if nums[mid] >= target:

high = mid

else:

low = mid + 1

if not nums or nums[low] != target:

return [-1, -1]

left = low

low, high = 0, len(nums)-1 # 第二次二分,找結束下標

while low < high:

mid = (low + high + 1) // 2 # 注意+1,不然會死迴圈

if nums[mid] <= target:

low = mid

else:

high = mid - 1

right = high

return [left, right] # 統計次數時返回right-left+1

參考:

solution/python3-liang-ci-er-fen-cha-zhao-jian-shao-ni-de-s/

劍指Offer 53 在排序陣列中查詢數字

package 劍指offer public class 劍指53 在排序陣列中查詢數字 和數字3,由於3在陣列中出現4次,所以返回結果4 思路 因為陣列是有序的,所以採用二分法查詢,當找到乙個k時,因為可能前面或者後面都有k,如果從當前找的到位置往兩頭開始遍歷,那麼有可能整個陣列為一樣的數,所以時...

劍指Offer 53 在排序陣列中查詢數字

統計乙個數字在排序陣列 現的次數。例 輸入陣列和數字3。由於3在這個陣列 現了4次,輸出4。遍歷陣列統計。時間複雜度 o n 空間複雜度 o 1 遍歷統計沒有利用到這是個排序陣列的資訊。因為是排序陣列,所以需要統計的數字i個數等於i right i left 1。只要找到數字的邊界即可。同時可以利用...

劍指offer 53 在排序陣列中查詢數字

0 n 1中缺失的數字 陣列中數值和下標相等的元素 統計乙個數字在排序陣列 現的次數。例如輸入排序陣列 1,2,3,3,3,3,4,5 和數字 3 由於 3 在這個陣列 現了 4 次,因此輸出 4 整數二分一般寫二分的思考順序是這樣的 首先通過題目背景和check mid 函式的邏輯,判斷答案落在左...