劍指Offer 53 數字在排序陣列中出現的次數

2021-09-02 18:55:30 字數 1510 閱讀 6160

統計乙個數字在排序陣列中出現的次數。例如輸入排序陣列[1, 2, 3, 3, 3, 3, 4, 5]和數字3,由於3在這個陣列中出現了4次,因此輸出4。

樣例輸入:[1, 2, 3, 3, 3, 3, 4, 5] , 3

輸出:4

class

solution

(object):

defgetnumberofk

(self, nums, k)

:"""

:type nums: list[int]

:type k: int

:rtype: int

"""number =

0 s = self.getfirstk(nums, k,0,

len(nums)-1

) e = self.getlastk(nums, k,0,

len(nums)-1

)if s >=

0and e >=0:

number = e - s +

1return number

defgetfirstk

(self, nums, k, start, end)

:if start > end:

return-1

mid =

int(

(start + end)/2

)if nums[mid]

== k:

if mid >

0and nums[mid -1]

!= k or mid ==0:

return mid

else

: end = mid -

1else

:if nums[mid]

> k:

end = mid -

1else

: start = mid +

1return self.getfirstk(nums, k, start, end)

defgetlastk

(self, nums, k, start, end)

:if start > end:

return-1

mid =

int(

(start + end)/2

)if nums[mid]

== k:

if mid < end and nums[mid +1]

!= k or mid == end:

return mid

else

: start = mid +

1else

:if nums[mid]

> k:

end = mid -

1else

: start = mid +

1return self.getlastk(nums, k, start, end)

劍指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 在排序陣列中查詢數字

給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。思路 看到 排列陣列 第一反應就得是二分查詢。但是一般的二分,如果在中點處剛好找到乙個數等於target,那接下來往哪邊走呢?沒辦法判...