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

2022-09-10 06:36:08 字數 2335 閱讀 1719

描述

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

如果陣列中不存在目標值 target,返回 [-1, -1]。

高階:你可以設計並實現時間複雜度為 o(log n) 的演算法解決此問題嗎?

鏈結

34. 在排序陣列中查詢元素的第乙個和最後乙個位置 - 力扣(leetcode) (leetcode-cn.com)

解法一:標準二分法

1

class

solution ;

1213}14

15//

尋找目標值在陣列中的開始位置

16private

int findbeginpostion(int nums , int

target)

4142

//否則,說明 mid 的左邊依然有元素值等於 target

43//

那麼 mid 就不是 target 的起始位置,需要在 mid 的左邊進行查詢

44//

所以縮小範圍為 left 到 mid - 1

45//

當前區間的左側為 left,右側 right = mid - 1

46 right = mid - 1;

4748

//如果中間位置的元素值大於目標值 target

49//

說明需要在 mid 的左邊進行查詢

50 }else

if( nums[mid] >target)else65}

6667

//如果迴圈結束後還沒有返回,說明找不到目標值 target,返回 -1

68return - 1;69}

7071

//尋找目標值在陣列中的結束位置

72private

int findendpostion(int nums , int

target)

9697

//否則,說明 mid 的右邊依然有元素值等於 target

98//

那麼 mid 就不是 target 的結束位置,需要在 mid 的右邊進行查詢

99//

所以縮小範圍為 mid + 1 到 right

100//

當前區間的左側為 left = mid + 1 ,右側為 right

101 left = mid + 1;

102103

//如果中間位置的元素值大於目標值 target

104//

說明需要在 mid 的左邊進行查詢

105 }else

if( nums[mid] >target)else

120}

121122

//如果迴圈結束後還沒有返回,說明找不到目標值 target,返回 -1

123return - 1;

124}

125126 }

解法二:二分法,盡量向左壓縮

1

public

class

solution ;6}

78int firstposition =findfirstposition(nums, target);

9if (firstposition == -1) ;11}

1213

int lastposition =findlastposition(nums, target);

14return

newint;15

}1617private

int findfirstposition(int nums, int

target) else30}

3132

if (nums[left] ==target)

35return -1;36}

3738

private

int findlastposition(int nums, int

target) else 50

}51return

left;52}

53 }

題解鏈結演算法訓練營第一期 | 在排序陣列中查詢元素的第乙個和最後乙個位置_algomooc演算法慕課網

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

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

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

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

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

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