在排序陣列中查詢元素的第乙個和最後乙個位置

2021-09-03 02:08:52 字數 1500 閱讀 3977

題目描述:

給定乙個按照公升序排列的整數陣列

nums,和乙個目標值 

target。找出給定目標值在陣列中的開始位置和結束位置。

你的演算法時間複雜度必須是 

o(log 

n)級別。

如果陣列中不存在目標值,返回 

[-1, -1]

示例1:

輸入: nums = [5,7,7,8,8,10], target = 8

輸出: [3,4]

示例2:

輸入: nums = [5,7,7,8,8,10], target = 6

輸出: [-1,-1]

**看著有點長,其實思路很簡單,先利用二分查到確定元素位置mid,再從mid前後探索start和end

class solution:

def searchrange(self, nums, target):

""":type nums: list[int]

:type target: int

:rtype: list[int]

"""mid = -1

end = -1

start = -1

left = 0

right = len(nums) - 1

res = [-1, -1]

if len(nums) == 0:

return res

if len(nums) == 1 and nums[0] == target:

res = [0, 0]

return res

while left <= right:

l = (left + right) // 2

if target > nums[l]:

left = l + 1

elif target < nums[l]:

right = l - 1

else:

mid = l

break

if mid == -1:

return res

else:

i = j = mid

while i <= len(nums)-1:

if nums[i] != target:

end = i - 1

break

end = i

i += 1

while j >= 0:

if nums[j] != target:

start = j + 1

break

start = j

j -= 1

res = [start, end]

return res

034在排序陣列中查詢元素的第乙個和最後乙個

1 include 000庫函式.h 2 3 使用二分法查詢到目標值的位置,然後分兩邊再查詢出起始位置和終止位置4 16ms 不是嚴格意義上的logn的複雜度 5class solution 9int i 0,j nums.size 1 10 int m 1 11 while i j 17if nu...

PHP 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8 輸出 3,4 示例 2 輸...

34 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是o log n 級別。如果陣列中不存在目標值,返回 1,1 輸入 nums 5,7,7,8,8,10 target 8 輸出 3,4 輸入 nums 5,7,7,...